(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() 方法来处理错误情况。
00
相似问题