错误描述:发送请求获取数据成功,network有返回的响应数据,但是一直报这个错误:
Uncaught (in promise),找了一晚上没找到什么错误
请求参数、方法都没有问题,排查后发现是响应拦截器return的问题
我之前的写法是基于axios官网的请求响应拦截器写法,直接在里面添加逻辑判断,如下:
// 添加响应拦截器
instance.interceptors.response.use(
function (response) {
// 后台约定,响应成功,但是code不是10000,是业务逻辑失败
if (response.data?.code !== 10000) {
showToast(response.data?.message || '业务失败')
return response.data?.message // 这里return错了...应该返回一个promise
}
return Promise.reject(response.data) // 业务成功需要把拿到的数据return出去
},
function (error) {
// 处理401 删除用户信息 跳转登录页+带上退出时的地址
if (error.response.status === 401) {
const store = useStoreUser()
store.delUser()
router.push({
path: '/login',
query: { returnUrl: router.currentRoute.value.fullPath }
})
}
return Promise.reject(error)
}
)
但在判断业务失败这里的return出来的内容错了。。。
业务失败应该返回promise,而不是message信息提示
业务成功要返回拿到的数据
这两个地方写的时候逻辑没有理清楚,搞混了。。。又是被自己蠢到的一天
修改后的代码如下:
// 添加响应拦截器
instance.interceptors.response.use(
function (response) {
// 后台约定,响应成功,但是code不是10000,是业务逻辑失败
if (response.data?.code !== 10000) {
showToast(response.data?.message || '业务失败')
return Promise.reject(response.data)
}return response.data
},
function (error) {
// 处理401 删除用户信息 跳转登录页+带上退出时的地址
if (error.response.status === 401) {
const store = useStoreUser()
store.delUser()
router.push({
path: '/login',
query: { returnUrl: router.currentRoute.value.fullPath }
})
}
return Promise.reject(error)
}
)