簡體   English   中英

當使用 fetch、axios 等時,`catch` 不處理錯誤,而是你的應用程序崩潰

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM