React中使用Axios進行錯誤處理的非同步/等待方法
P粉186904731
P粉186904731 2023-08-26 10:41:39
0
1
526
<p>我正在使用Axios來獲取一些數據:</p> <pre class="brush:php;toolbar:false;">export const getProducts = async () => { try { const { data } = await axios.get(`/api/products`) return data } catch (err) { console.log(err) return err } }</pre> <p>一切都很好,但是我需要在try區塊內捕獲http錯誤。例如,當與伺服器的連線遺失時,Axios會傳回一個AxiosError物件:</p> <blockquote> <ol> <li>AxiosError {message: '請求失敗,狀態代碼 404', name: 'AxiosError', code: 'ERR_BAD_REQUEST', config: {…}, request: XMLHttpRequest,...}</li> <li>代碼:「ERR_BAD_REQUEST」</li> <li>配置:{過渡:{…},適配器:數組(2),transformRequest:數組(1),transformResponse:數組(1),超時:0, …}</li> <li>訊息:「請求失敗,狀態碼為 404」</li> <li>名稱:「AxiosError」</li> <li>請求:XMLHttpRequest {onreadystatechange:null,readyState:4,逾時:0,withCredentials:false,上傳:XMLHttpRequestUpload, …}</li> <li>回應:{資料:'nnn<元字元...re>無法取得 /api/productsnnn',狀態:404,statusText:'不 找到',標頭:AxiosHeaders,配置:{...},...}</li> <li>堆疊:「AxiosError:請求失敗,狀態碼為 404n 解決時 (webpack-internal:///./node_modules/axios/lib/core/settle.js:24:12)n 在 XMLHttpRequest.onloadend (webpack-internal:///./node_modules/axios/lib/adapters/xhr.js:117:66)"</li> <li>[[原型]]:錯誤</li> </ol> </blockquote> <p>問題是:如果有錯誤,我想渲染一個顯示「取得資料時發生錯誤」的div。如果沒有錯誤,請按照通常的方式渲染一個產品表格。 </p> <p>我這樣呼叫我的函數:</p> <pre class="brush:php;toolbar:false;">const productsArr = await getProducts()</pre> <p>我該如何判斷productsArr是有效的產品陣列還是AxiosError? </p>
P粉186904731
P粉186904731

全部回覆(1)
P粉066224086

您可以在官方文件中查看如何處理錯誤:https://axios-http.com/docs/handling_errors

#如果沒有收到回應,則可以查看錯誤(從axios文件複製)

else if (error.request) {
      // 发送请求但未收到响应
      // `error.request` 在浏览器中是XMLHttpRequest的实例,在node.js中是http.ClientRequest的实例
      console.log(error.request);

您可以使用錯誤處理邊界包裝您的元件。您可以建立一個元件,它將包裝發生錯誤的其他元件,並使用componentDidCatch生命週期方法,這與在try-catch中使用catch{}相同。 https://reactjs.org/docs/react-component.html#componentdidcatch。或使用一個流行的npm套件https://www.npmjs.com/package/react-error-boundary

#
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板