問題:在Vue項目中使用axios調用一個第三方的接口時,前端無法獲取到接口返回值,檢查控制台Network發現接口請求已經正常發出並且有數據返回,但是控制台Console報了這么一個錯誤
上圖可以看到接口請求正常響應並有返回,控制台卻一直報錯 Uncaught (in promise)
排查一番之后發現,是接口響應攔截器里面的問題,原本封裝好的請求方法里面response.data.code == 0才算請求成功,因為我們自己這邊的接口請求成功時響應的code值為0,但是今天訪問的是第三方的接口,這個接口請求成功時返回的code值為200,從上圖可看出,所以這個請求的響應被攔截掉了,從而Promise.reject(rejection)報錯。
解決辦法:修改攔截器里面的判斷,將code為200也視為成功(這里根據實際接口返回做修改)
axios.interceptors.reponse.use(res => { // 請求成功對響應數據做處理,此處返回的數據是axios.then(res)中接收的數據 if (res.code ==0 || res.code == 200) { // code值為 0 或 200 時視為成功 return Promise.resolve(res) } return Promise.reject(res) }, err => { // 在請求錯誤時要做的事兒 ... // 此處返回的數據是axios.catch(err)中接收的數據 return Promise.reject(err) })
修改完之后,前端就能正常拿到接口的返回值了。
以上方法可供參考,可能還有其他造成這個報錯的原因