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. 未處理的承諾拒絕:this.getData不是一個函數
- 3. 爲什麼這是一個未處理的承諾拒絕?
- 4. Node.js:未處理的承諾拒絕 - 未處理的拒絕拒絕警告
- 5. 奇怪的未處理承諾拒絕
- 6. 未處理的承諾拒絕
- 7. 貓鼬右承諾拒絕處理
- 8. 的NodeJS:未處理的承諾拒絕
- 9. 未處理的承諾,拒絕嘗試
- 10. 未處理的承諾拒絕17
- 11. Node.js未處理的承諾拒絕
- 12. 未處理的承諾拒絕警告
- 13. 陣營母語:RNGeocoder.reverseGeocodeLocation - 可能未處理的承諾拒絕
- 14. React Native:可能未處理的承諾拒絕(id:0)
- 15. 未處理的承諾拒絕(拒絕ID:1) - Node.js
- 16. UnhandledPromiseRejectionWarning:未處理的承諾拒絕(拒絕ID:1):3
- 17. 承諾拒絕失敗,承諾承諾
- 18. 防止觸發全局'未處理拒絕'事件的承諾
- 19. 可能未處理的承諾拒絕(id:0)null不是對象
- 20. 可能未處理的承諾拒絕(id:0):undefined不是對象
- 21. 是否有可能在Promise.all中捕獲所有被拒絕的承諾?
- 22. 藍鳥承諾:是否可能有多個阻()在新的承諾(函數(解析,拒絕)
- 23. 「未處理的承諾拒絕」的諾言鏈抓
- 24. 什麼是未處理的承諾拒絕?
- 25. 構建一個承諾沒有分解或拒絕
- 26. 如何拒絕承諾內的承諾
- 27. React Native中可能未處理的承諾拒絕網絡錯誤
- 28. 可能未處理的承諾拒絕(id:0):ReferenceError:找不到變量:錯誤
- 29. 可能未處理的承諾拒絕 - 陣營本土與火力地堡
- 30. 理解node.js中的承諾拒絕
這似乎是合理的。當你嘗試時發生了什麼? –
我還沒有,我想在一個新的分支做它,以防萬一它不工作,所以我只是完成我目前的拉請求,我會在一個小時內嘗試。如果沒有人在那段時間內回覆,我會發布結論並解決問題。 –