http.interceptors.response.use((response) => { /* 请求之后拦截器。可以使用async await 做异步操作 */
// if (response.data.code !== 200) { // 服务端返回的状态码不等于200,则reject()
// return Promise.reject(response)
// }
console.log(1)
console.log(response)
let data = response.data;
if(data.state == 'fail'){ //业务上的错误
//全局的处理,比如提示后面返回的error massage
return;
}
return response
}, (response) => { // 请求错误做点什么。可以使用async await 做异步操作
console.log(2)
console.log(response)
uni.showToast({
title:"好像哪里出错了",
icon:"none"
})
return Promise.reject(response)
})
http.get('/test?e=1',{params:{'b':2,'c':3}}).then(res =>{
console.log("getInfo==========");
console.log(res.data);
})
如上代码 response拦截器判断response.data.state == fail 后 如何 让下面http.get()的then部分不执行, 就说在接到业务上的错误后 做个全局的处理 不要再走http.get().的then了
求指教,万分感谢
4***@qq.com (作者)
不想return Promise.reject(response) 这里就是当返回业务上的错误时 想做个统一的处理,比如弹窗提示后台返回的error msg,然后就结束了, get的then和catch都没有必要走了,有没有什么办法
2020-12-03 21:42
luch
回复 4***@qq.com: 没有办法。Promise有三种状态,分别是:Pending (进行中), Resolved (已完成), Rejected (已失败)。他必须有一个结果。
2020-12-03 23:39
4***@qq.com (作者)
回复 luch: 可不可以直接在 response拦截器里把状态改成已完成呢 不走后面 的
2020-12-03 23:40
luch
你可以把拦截器理解成promise的内部。return res就是调用reslove。return promise.reject 就是调用reject。最后这个promise就在局部api响应then或者catch
2020-12-03 23:45
luch
你可以把http.get再包一个promise分装一个函数。然后用这个函数。错误的时候不要调用reslove或者reject。但是这样违背原则。有点憨
2020-12-03 23:49
4***@qq.com (作者)
回复 luch:额 谢谢解答
2020-12-04 00:02