在做一些工作时,我看到Firebug中出现的“未捕获的异常”错误出现在看似随机的时刻。背景中的承诺引发了例外情况。在Firefox中随机延迟后报告的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中,它基于垃圾收集,所以它不是确定性的,但可能更安全。 –