(err)没有返回promise对象是否影响后续操作?

来源:4-13 -使用 axios 请求库,设置请求拦截-02

秋得法

2024-03-19

instance.interceptors.response.use(
  (response) => {
    const { data: _data } = response
    const { data, code, msg } = _data
    if (code !== 0) {
      showDialog({
        message: msg,
      }).then(() => {
        //其他行为
      })
      return Promise.reject(msg)
    }
    return data
  },
  (err) => {
    if (err.response && err.response.status === 401) {
      showDialog({
        message: '请登录',
      }).then(() => {
        //其他行为
      })
    }
  }
)

上述在(err)部分没有返回promise对象是否影响后续操作?

写回答

1回答

秋得法

提问者

2024-03-19

在拦截器的第二个参数中,如果没有返回一个 Promise 对象(或者说没有显式地返回一个被拒绝的 Promise 对象),就会导致 Axios 认为请求已经被处理,并且继续将成功的响应传递给后续的 .then() 方法。

这样会导致一些问题,因为实际上我们并没有正确地处理请求失败的情况。如果发生了错误,例如服务器返回了 401 状态码,我们会显示一个提示登录的弹窗,但并没有明确地告诉 Axios 请求已经失败,而是继续将响应传递给后续的 .then() 方法,从而导致可能不正确的行为。

为了正确地处理请求失败的情况,我们应该在拦截器的第二个参数中返回一个被拒绝的 Promise 对象,以便让 Axios 知道请求已经失败,并且正确地将控制权转交给后续的 .catch() 方法来处理错误情况。


0
0

Vue3+Pinia+Vite+TS 还原高性能外卖APP项目

Vue3+Pinia+Vite+TS 还原高性能外卖APP项目

392 学习 · 251 问题

查看课程