在做一些工作時,我看到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中,它基於垃圾收集,所以它不是確定性的,但可能更安全。 –