![](/img/trans.png)
[英]React app 'crashes' due to fetch/axios inability to correctly pass error to catch block
[英]when using fetch, axios, etc.`catch` doesn't handle the error, instead your app crashes
為了確保我們的請求成功,首先,我們檢查互聯網連接,然后發送我們的請求。 像這樣:
NetInfo.isConnected.fetch().then(async isConnected=> {
if(isConnected){
try {
let result = await fetch(MY_REMOTE_SERVER);
console.log("result: ", result)
} catch (error) {
console.error("error: ", error);
}
}
else ToastAndroid.show('No internet', ToastAndroid.SHORT);
});
一切都很好,直到我遇到這個問題:考慮某些國家/地區對服務器的訪問被阻止的情況。
因此,盡管互聯網連接正常,但每次我收到network request failed
錯誤時。 我找不到問題,因為我希望catch
打印錯誤,但我的應用程序只是崩潰了。
現在知道原因了,不知道怎么解決。 例如,當無法建立連接時,我想提醒用戶使用 VPN 或離開應用程序,因為他們在禁運國家!
另一方面,捕捉的重點是什么!? 如果它沒有發現錯誤! 謝謝。
實際上這是我們這邊的一個錯誤,react-native 會在遇到console.error
崩潰。 因此,通過將上面的代碼更改為此版本,您將擺脫紅屏:
NetInfo.isConnected.fetch().then(async isConnected=> {
if(isConnected){
try {
let result = await fetch(MY_REMOTE_SERVER);
console.log("result: ", result)
} catch (error) {
// use "log" instead of "error"
console.log("error: ", error);
// or you may want to show a toast on error like
oastAndroid.show('No internet', ToastAndroid.SHORT)
}
}else ToastAndroid.show('No internet', ToastAndroid.SHORT);
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.