情况
假设代码如下
this.axios
.get(url)
.then(res=>{}); // 没有写catch
一般请求出错,promise抛出reject,走catch函数,但是你没有写就报错如下
官方文档
MDN文档
当Promise 被 reject 且没有 reject 处理器的时候,会触发 unhandledrejection 事件;这可能发生在 window 下,但也可能发生在 Worker 中。 这对于调试回退错误处理非常有用。
解决办法
- 1 通常做法写上catch
this.axios
.get(url)
.then(res=>{})
.catch(err=>{})
- 2 像我这种情况,接手别人的代码,那么多,都没有写catch,一个一个加还不累死我啊。只能出此下策,不写的话,就是页面console会报错,看着不舒服。
// 阻止Promise抛出reject但是没有写catch
window.onunhandledrejection = (event) => {
// 不兼容ie
console.warn(event.reason);
event.preventDefault();
};
最后说一下
写代码不能只考虑正常情况,还要考虑异常情况处理,这对于用户体验很重要。要不是接这个项目,我还不知道,竟然有人使用promise不考虑异常情况。
再吐槽一下
平时开发难道不看控制台吗?没注意到报错,警告吗?先不说代码质量如何,最起码的上线不能出现报错吧