axios取消请求

图片描述
用axios发起了一个请求,结果请求超时或其他失败理由,source.cancel方法没有执行,所以并没有取消这个请求,请问是为什么,有什么解决办法吗?如果有,那可以做到全局监控错误,然后取消请求吗?如有答案,就先蟹蟹你的回答了(^∀^)!

阅读 4.3k
3 个回答

不要对前端的取消请求有误解。

请求再未送达前可以取消请求,但有时候并不一定代表后端没有收到。

后端可能已经收到了请求但是处理需要时间。

请求超时也属于后端已经接受了请求,这时候取消是没有任何意义的,因为服务端能返回结果时(如 超时) 代表服务端已经处理完请求了。

你所指的取消请求具体是什么意思,或者你想让其做什么。
你现在在 catch 里面使用 cancel 方法,但是这个时候请求已经完成了,就不可能在取消该请求了。

另外Promise 有三个状态:pendingfulfilledrejected,只要是在 Promise 的 thencatch 里面,该请求都已完成了。

整理下你的问题:1.想要全局监控错误 2.想要在catch中捕获错误

方案是,在你的$http,即axios的全局封装中添加响应拦截器:

instanct.interceptors.response.use(response=>{
    //这里对请求成功的数据做全局处理
}, error=> {
    //这里做全局错误处理
    return Promise.reject(err)
    //return Promise.reject(err)的作用是继续将错误返回到catch中,加上这个你的source.cancel方法就能执行了
})
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题