Promise的catch方法,是不是一定要把错误信息打印出来?
// 常见的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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
你可以把同类型的错误处理写成一个重用的公共的函数或者方法,然后在每个请求的catch中调用这个函数。
首先Promise就不多说了,你能使用上述代码,说明已经很熟悉了(简单提一句,如果有必要catch是可以不写的)
针对你提到的异常处理多说一点吧
排除前后端代码本身有问题的情况下,后台接口一般会返回接口状态码(注意,不是http的状态码),一般情况下200为正常,那反过来说除了200都是异常
这里有两种操作
1.无论接口状态码是多少,后台都会把状态和描述返回(不讨论接口本身报错的情况,比如http状态码为500+),这个时候对前端来说,收到的http状态都会是200,那么我们的catch永远都不会回调(简单的说可以不写catch)
2.接口只会将接口状态码为200的返回正确,其他的直接抛异常,这个时候前端then内回调的全是正常数据,异常全在catch内,如果这些异常数据不展示给用户看的情况下,catch也可以不写
总结一下,根据自己团队习惯灵活处理自己的代码才是合适的
interceptor
,你可以在拦截器里处理一部分通用错误,比如 401、404、504 等。