fetch()
是在经典XMLhttpRequest()
有很大的改进但我在想,如果我添加window.addEventListener('unhandledrejection', event => ···);
我index.android.js
和index.ios.js
我可以从理论上我的诺言链中删除所有我.catch()
的,使伪全球承诺拒绝处理?我正在构建一个反应本机应用程序,严重依赖api调用,其中许多用户令牌已通过身份验证。当用户登录令牌时将存储在异步存储中,但每个令牌将在一段时间后过期。如果用户打开应用程序并且无意中尝试进行需要使用过期令牌进行身份验证的调用,则我希望将用户路由到登录页面,而不管调用的是什么或调用了哪个组件。每个单独的承诺链自己处理未经认证的调用。有没有更好的方法来做到这一点?是否有可能创建一个伪全球承诺拒绝处理程序?
1
A
回答
0
您可以在fetch
之上进行自定义抽象,这将提供与API进行通信的方式,并且还具有一些业务逻辑,对于您来说,请求身份验证令牌或进行重定向。然后在代码的其余部分使用这个抽象来进行API调用。这里是一个小例子来验证这个想法:
export default function request(url, options = {}) {
const req = fetch(url)
.then((response) => {
// Global response handler
// ...
// Hand response down the promise chain
return response;
})
.catch((err) => {
// Global error handler
// Check error status and (make redirect/request auth token)
// Throw error down the promise chain if needed
throw err;
});
// Returns a promise
return req;
}
然后你在你的代码一样fetch()
使用它,而是你将能够修改和扩展它为你需要的任何时间。
request('http://example.com/api/post/1')
.then((response) => {
// "response" has whatever you returned from global handler
})
.catch((err) => {
// "err" is whatever you've thrown from global handler
});
+0
这是一个好主意,如果我无法让观察者工作,我可能会这样做。 –
相关问题
- 1. 处理Js承诺拒绝
- 2. 未处理的承诺拒绝当拒绝承诺在角2
- 3. 为什么这是一个未处理的承诺拒绝?
- 4. 未处理的承诺拒绝:this.getData不是一个函数
- 5. Node.js:未处理的承诺拒绝 - 未处理的拒绝拒绝警告
- 6. 猫鼬右承诺拒绝处理
- 7. 奇怪的未处理承诺拒绝
- 8. 未处理的承诺拒绝17
- 9. 的NodeJS:未处理的承诺拒绝
- 10. 未处理的承诺,拒绝尝试
- 11. 未处理的承诺拒绝警告
- 12. 未处理的承诺拒绝
- 13. Node.js未处理的承诺拒绝
- 14. React Native:可能未处理的承诺拒绝(id:0)
- 15. 阵营母语:RNGeocoder.reverseGeocodeLocation - 可能未处理的承诺拒绝
- 16. 阵营原生:可能未处理的承诺拒绝
- 17. 使用findQuery()处理承诺数据的承诺拒绝
- 18. UnhandledPromiseRejectionWarning:未处理的承诺拒绝(拒绝ID:1):3
- 19. 未处理的承诺拒绝(拒绝ID:1) - Node.js
- 20. 承诺拒绝失败,承诺承诺
- 21. 防止触发全局'未处理拒绝'事件的承诺
- 22. 可能未处理的承诺拒绝(id:0):undefined不是对象
- 23. 可能未处理的承诺拒绝(id:0)null不是对象
- 24. 警告:承诺是在处理程序创建,但是从它
- 25. 是否有可能在Promise.all中捕获所有被拒绝的承诺?
- 26. 蓝鸟承诺:是否可能有多个阻()在新的承诺(函数(解析,拒绝)
- 27. 拒绝承诺链
- 28. 未处理的承诺拒绝:不能匹配任何路由
- 29. “未处理的承诺拒绝”的诺言链抓
- 30. 什么是未处理的承诺拒绝?
这似乎是合理的。当你尝试时发生了什么? –
我还没有,我想在一个新的分支做它,以防万一它不工作,所以我只是完成我目前的拉请求,我会在一个小时内尝试。如果没有人在那段时间内回复,我会发布结论并解决问题。 –