javascript - Firefox 随机延迟后报告 Promise 异常

标签 javascript firefox promise

在做一些工作时,我看到 Firebug 中报告的“未捕获异常”错误似乎是随机出现的。异常是在后台的 promise 中抛出的。

一开始我对报告的错误感到很惊讶,因为我的理解是 promise 中抛出的错误只是被捕获并沿着回调链传递。但它们在后 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"
}

最佳答案

At first I was surprised the errors were reported at all, as my understanding was that errors thrown in promises are simply caught and passed along the callbacks chain

是的,他们确实是。您通过 p.then(kill) 创建的 promise 将被拒绝。

但我们真的不想要那样。被默默忽略的异常?这不是个好主意。所以我们需要unhandled rejection处理。 “未处理的异常”是一个没有附加错误处理程序的被拒绝的 promise 。识别这些有一些问题,因为稍后可能会故意附加错误处理程序,我们不希望报告该 promise 。不过, promise 实现有能力跟踪他们的 promise 并报告“可能未处理的拒绝”,参见 this answerHow do I handle exceptions globally with native promises in node.js?了解更多详情。

reported in Firebug appearing at seemingly random moments.

当垃圾回收时,您可以完全确定 promise 在没有附加处理程序的情况下被拒绝。 IIRC,Firefox 确实实现了这个钩子(Hook),所以这些“随机时刻”将取决于 GC 行为。

关于javascript - Firefox 随机延迟后报告 Promise 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31372647/

相关文章:

html - 嵌入PDF会随机不显示

html - IE 和 FF 中的相对和绝对定位

asynchronous - 如何在 Jest 中让 promise 超时?

javascript - 如何在 Firebase 的 '' on'' 方法上调用 promise ?

c# - jQuery 加载 txt 文件 .html()

javascript - knp snappy 包,从动态修改的 Twig 生成 pdf

css - 使用背景大小调整背景图像的大小,在 Firefox 中失败

javascript - 在 if 语句上使用 Promises

javascript - 在没有 Firebug 的情况下使用 Selenium?

javascript - 使用 jQuery 创建 Accordion ,但得到 "$ is not defined"