bug研发机之Uncaught (in promise) 的解决方法及原因

1,103 阅读2分钟

问题:在Vue项目中使用axios调用一个第三方的接口时,前端无法获取到接口返回值,检查控制台Network发现接口请求已经正常发出并且有数据返回,但是控制台Console报了这么一个错误

Snipaste_2022-06-07_21-07-31.png

Snipaste_2022-06-07_21-08-53.png 上图可以看到接口请求正常响应并有返回,控制台却一直报错 Uncaught (in promise) 

排查一番之后发现,是接口响应拦截器里面的问题,原本封装好的请求方法里面response.data.code == 0才算请求成功,因为我们自己这边的接口请求成功时响应的code值为0,但是今天访问的是第三方的接口,这个接口请求成功时返回的code值为200,从上图可看出,所以这个请求的响应被拦截掉了,从而Promise.reject(rejection)报错。

解决办法:修改拦截器里面的判断,将code为200也视为成功(这里根据实际接口返回做修改)

  // 请求成功对响应数据做处理,此处返回的数据是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)
})

修改完之后,前端就能正常拿到接口的返回值了。 但是!!!,经过我的实验,这个方法并不能解决所有的问题。

当反复观察得时候,原来原因竟然是 一个在login 默认登录账号得错误,还有就是错误信息没有提示的机制; 经研究,于是乎解决这个错误提示 还有另外两个方法

在login 页面逐一打印,res 值了什么得都有!!! Snipaste_2022-06-07_21-15-22.png

一.在登录login 界面; 用catch 的方法去捕获错误

Snipaste_2022-06-07_21-14-41.png

二. 在login 登录界面 请求数据的时候,返回报错即可

Snipaste_2022-06-07_21-14-00.png