问题:登录时,填写错误的用户名密码,没有错误提示(没有进入catch分支)
axios内部的报错机制:
- 如果本次请求得到的响应的状态码 不是2开头的(如:400,500),就会主动抛出错误。
- 如果本次请求出现网络错误,就会主动抛出错误
当我们提供错误的用户名和密码时,本次请求的状态码是正常的(但是:success字段是false),也没有网络错误,所以axios并不会报错。如下图示
解决思路:在响应拦截器中,根据本次请求返回的数据中的success字段值,来决定是否主动抛出错误。
// 响应拦截器
service.interceptors.response.use(response => {
if (response.data.success) {
// 操作成功
} else {
// 如果success为false 业务出错,直接触发reject
// 被catch分支捕获
return Promise.reject(new Error(message))
}
}, error => {
return Promise.reject(error) // 返回执行错误 让当前的执行链跳出成功 直接进入 catch
})