try catch/Promise 如何捕获运行时异常
try catch
能捕捉到的异常必须是线程执行已经进入 try catch, 但 try catch 未执行完时抛出的异常
try catch的执行周期
执行前 不能捕捉异常
语法异常(syntaxError)在语法检查阶段报错,未进入 try catch
1 | try{ |
执行中 能捕捉到异常
1 | try{ |
执行后 不能捕捉异常
线程已经执行完
1 | try{ |
Promise
catch
try catch 无法捕捉 Promise 的异常,用Promise.prototype.catch
同步和异步的 Promise 异常都是由 reject 和 Promise.prototype.catch 来捕获
因为 Promise 在执行回调中都用 try catch 包裹起来了,所有的异常都被内部捕获到了,并未往上抛异常,因此在外层的 try catch 看来没有异常
unhandledrejection
通过监听unhandledrejection事件,可以捕获未处理的Promise错误
1 | window.addEventListener('unhandledrejection', event => { |
rejectionhandled
当一个Promise错误最初未被处理,但是稍后又得到了处理,则会触发rejectionhandled事件
1 | window.addEventListener('rejectionhandled', event =>{ |