设置axios拦截器,promise抛出的异常如何全局处理?

发布于 2022-09-05 21:33:58 字数 834 浏览 11 评论 0

axios.interceptors.response.use((response) => {
  if (response.data.error_no !== '0') {
    showErrorMsg(response.data.error_info);
    return Promise.reject(response);
  }
  return response.data;
}, (error) => {
  Toast.offline('网络传输错误', 1);
  return Promise.reject(error);
});

针对返回内容做了一下拦截,如果error_no !== '0'就认为是请求错误(比如未登录等等),这时候会把错误信息提示给用户。

设置了这个拦截器之后,我写的请求格式如下:

axios.get('xxxx').then((res) => {
  // 请求成功
  // DO STH
})

// 如果要处理Promise抛出的异常的话,每个请求后面都得带上catch:
axios.get('xxxx').then((res) => {
  // 请求成功
  // DO STH
}).catch((err) => {
  console.log(err);
})

实际上开发者并没有对捕获到的err做什么处理,每个axios请求都带上catch显得很麻烦、累赘。

第一:有没有什么方法统一设置下 处理这个异常? 省得控制台老是报错 Uncaught (in promise)

第二:如果不设置异常处理,应用程序会有什么问题吗?比如容易奔溃、不稳定等等

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

回忆那么伤 2022-09-12 21:33:59

我在axios的issue里找到了这个解决方案:how to break promise chain in interceptors?

clipboard.png

作者不建议这样做,可能认为异常还是要处理一下比较好吧~~~

小傻瓜 2022-09-12 21:33:59

可以对 axios 做一层封装
编辑
大概这样吧:

export default {
    get (url, params) {
        return axios.get().then().catch()
    },
    post (url, params) {
        return axios.post().then().catch()
    }
}
浴红衣 2022-09-12 21:33:59

把 axios 的操作封装到函数中,涉及到配置和参数的部分,通过这个函数进行调用,函数内部执行axios的实际操作。

这样,axios().get().then().catch() 就能封装成 funcAxios(); 一个操作。

你就不需要每次都是用 axios...... ,catch自然也就不用写了。

至于封装的内容,需要看你的业务逻辑涉及哪些。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文