用axios发起了一个请求,结果请求超时或其他失败理由,source.cancel方法没有执行,所以并没有取消这个请求,请问是为什么,有什么解决办法吗?如果有,那可以做到全局监控错误,然后取消请求吗?如有答案,就先蟹蟹你的回答了(^∀^)!
用axios发起了一个请求,结果请求超时或其他失败理由,source.cancel方法没有执行,所以并没有取消这个请求,请问是为什么,有什么解决办法吗?如果有,那可以做到全局监控错误,然后取消请求吗?如有答案,就先蟹蟹你的回答了(^∀^)!
你所指的取消请求具体是什么意思,或者你想让其做什么。
你现在在 catch
里面使用 cancel
方法,但是这个时候请求已经完成了,就不可能在取消该请求了。
另外Promise 有三个状态:pending
、fulfilled
、rejected
,只要是在 Promise 的 then
和 catch
里面,该请求都已完成了。
整理下你的问题:1.想要全局监控错误 2.想要在catch中捕获错误
方案是,在你的$http,即axios的全局封装中添加响应拦截器:
instanct.interceptors.response.use(response=>{
//这里对请求成功的数据做全局处理
}, error=> {
//这里做全局错误处理
return Promise.reject(err)
//return Promise.reject(err)的作用是继续将错误返回到catch中,加上这个你的source.cancel方法就能执行了
})
10 回答11.4k 阅读
4 回答3.2k 阅读✓ 已解决
2 回答2.9k 阅读✓ 已解决
3 回答2.5k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
2 回答2k 阅读✓ 已解决
4 回答2k 阅读✓ 已解决
不要对前端的取消请求有误解。
请求再未送达前可以取消请求,但有时候并不一定代表后端没有收到。
后端可能已经收到了请求但是处理需要时间。
请求超时也属于后端已经接受了请求,这时候取消是没有任何意义的,因为服务端能返回结果时(如 超时) 代表服务端已经处理完请求了。