Promise的catch方法,是不是一定要把错误信息打印出来?

发布于 2022-09-11 21:20:39 字数 539 浏览 15 评论 0

// 常见的promise使用例子
var promise1 = new Promise(function(resolve, reject) {
  setTimeout(function() {
    resolve('foo');
  }, 300);
});
promise1
    .then(data => {
        // 处理正常业务逻辑
        var a = null
        a.b = 3
    })
    .catch(error => {
        // 处理异常
    })

上面是常见的promise使用例子,当promise1进入到reject状态时,catch会捕捉到,并进行异常处理;

但业务逻辑产生不可预知的错误时,也会被catch捕捉,如果不被特殊判断的话,就会按照reject状态一同被处理。

由于项目中使用的是axios进行数据请求,因此写了上千个axios的Promise实例。如果每一个catch都要判断error类型并单独处理的话,感觉特别浪费代码且不方便。有什么更好地解决办法吗?

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

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

发布评论

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

评论(4

你与清晨阳光 2022-09-18 21:20:39

你可以把同类型的错误处理写成一个重用的公共的函数或者方法,然后在每个请求的catch中调用这个函数。

¢蛋碎的人ぎ生 2022-09-18 21:20:39
  1. 逻辑的更改,变动尽量不要放在 promise 的 then 里,可以调用函数,在函数里try catch;
  2. 使用typescript,可大大减少基本逻辑的错误;
可爱暴击 2022-09-18 21:20:39

首先Promise就不多说了,你能使用上述代码,说明已经很熟悉了(简单提一句,如果有必要catch是可以不写的)
针对你提到的异常处理多说一点吧
排除前后端代码本身有问题的情况下,后台接口一般会返回接口状态码(注意,不是http的状态码),一般情况下200为正常,那反过来说除了200都是异常
这里有两种操作
1.无论接口状态码是多少,后台都会把状态和描述返回(不讨论接口本身报错的情况,比如http状态码为500+),这个时候对前端来说,收到的http状态都会是200,那么我们的catch永远都不会回调(简单的说可以不写catch)
2.接口只会将接口状态码为200的返回正确,其他的直接抛异常,这个时候前端then内回调的全是正常数据,异常全在catch内,如果这些异常数据不展示给用户看的情况下,catch也可以不写

总结一下,根据自己团队习惯灵活处理自己的代码才是合适的

与往事干杯 2022-09-18 21:20:39
  1. 应该把错误显示出来,告知用户,这样用户才好进行下一步操作,你们也好 debug。
  2. axios 可以加拦截器 interceptor,你可以在拦截器里处理一部分通用错误,比如 401、404、504 等。
  3. 实际上 axios 可以当单例来用,不需要反复创建实例。
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文