捕获 Promise 中的异常
2018-08-07 本文已影响0人
Asuna_随便记录点
问题
- unhandled promise rejection
- Uncaught (in promise) Error
- unhandled rejection
在 Promise 中发生的未捕获异常不会被 window.onerror
捕获,如果你的页面使用了 前端异常监控平台 这样的东西,会导致无法自动收集未捕获的 Promise 异常。
比如你在 Promise 中,在不主动 catch 的情况下,如果使用 throw new Error()
或者 reject('error')
,都会变成 Uncaught (in promise) Error
而不会被 window.onerror
捕获。
解决
如果你想要在全局捕获这类的错误,有两种方法:
1、改写 Promise,使用一个非系统原生的 Promise 库,并改写内部异常捕获的逻辑,将异常抛出。(适合框架开发者)
2、在 Promise 中异步抛出异常,比如 setTimeout(function(){ throw new Error() })
来抛出想被全局捕获的异常。(适合业务开发者)