1. 程式人生 > 程式設計 >vue axios請求成功卻進入catch的原因分析

vue axios請求成功卻進入catch的原因分析

問題:axios返回200狀態碼(即請求成功)卻走進了catch裡面

原因:

1.當axios請求完成後走的時then的程式碼塊,如果then程式碼塊中存在錯誤程式碼資訊,這時就會進入catch中丟擲異常(注意:此時控制檯並不會報錯,因為錯誤被catch捕獲了

2.axios是非同步發起,若發起後頁面重新整理,那麼就會丟失當前程序,導致接收不到。例如 form表單,點選按鈕提交後,表單會重新整理

補充知識:axios用catch的寫法與不使用catch有什麼區別?

官網上的寫法:

axios.post(url,data)
  .then(response => {
    console.log(response);
  })
  .catch(error => {
      console.log(error);
  })

公司專案的寫法:

axios.post(url,data)
  .then(response => {
    console.log(response);
  },error => {
    console.log(error);
  })

之前一直沒有仔細研究過then和catch的寫法,事實上,這個不是 axios catch 的相關 而是關於 new Promise() 的then

阮一峰在 promise 文件中有介紹。

一般來說,不要在then方法裡面定義 Reject 狀態的回撥函式(即then的第二個引數),總是使用catch方法。

// bad
promise
 .then(function(data) {
  // success
 },function(err) {
  // error
 });

// good
promise
 .then(function(data) { //cb
  // success
 })
 .catch(function(err) {
  // error
 });

上面程式碼中,第二種寫法要好於第一種寫法,理由是第二種寫法可以捕獲前面then方法執行中的錯誤,也更接近同步的寫法(try/catch)。因此,建議總是使用catch方法,而不使用then方法的第二個引數。

公司的寫法無法catch第一個引數的異常。

這樣寫可能容易看懂一些:

axios.post(url,data)
  .then(response => {
    //處理邏輯
  },error => {
    console.log('介面報錯');
  })
  .catch(error=>{
    console.log('處理邏輯出錯');
  })
axios.post(url,data)
  .then(response => {
    //處理邏輯
  })
  .catch(error=>{
    console.log('介面或處理邏輯出錯');
  })

以上這篇vue axios請求成功卻進入catch的原因分析就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。