【发布时间】:2015-07-12 21:12:17
【问题描述】:
在做一些工作时,我看到 Firebug 中报告的“未捕获异常”错误出现在看似随机的时刻。异常是在后台的 Promise 中抛出的。
起初我对报告的错误感到惊讶,因为我的理解是,在 Promise 中抛出的错误只是被捕获并沿着回调链传递。但它们也在 post-Opera (=Chrome) 中被报道,而且它们不会杀死脚本,所以这是一件好事。
但是在 Opera 中会立即报告异常,而在 Firefox 中会出现一些看似随机的延迟(从几秒到半分钟)。这是为什么呢?
这是一个测试代码:
var p = new Promise( okLater );
p.then( kill );
function okLater( pass, fail ) {
setTimeout( pass.bind( this, "O.K." ), 10 );
}
function kill() {
console.log( "Killing" );
throw "Oops"
}
【问题讨论】:
-
我在移动设备上,但是 - 在 Chrome 中,未处理的拒绝跟踪在所有微任务都通过并且没有附加
catch后运行。在 Firefox 中,它基于垃圾收集,因此它不是确定性的,但可能更安全。
标签: javascript firefox promise