promise没有写catch报错,Uncaught (in promise)

3,073 阅读1分钟

情况

假设代码如下

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不考虑异常情况。

再吐槽一下

平时开发难道不看控制台吗?没注意到报错,警告吗?先不说代码质量如何,最起码的上线不能出现报错吧