gpt4 book ai didi

javascript - promise 的错误处理程序中的错误丢失

转载 作者:行者123 更新时间:2023-11-29 21:57:57 25 4
gpt4 key购买 nike

如果我在 promise 的 catch 处理程序中抛出错误,错误永远不会冒出来!

Promise.resolve()
.then(function() { return foo.bar(); })
.then(function() { return console.log('ok!'); })
.catch(function(err) { return baz.quux(); });

在 Node v0.8 和 promise 中模块和 Chrome 36 的 JavaScript 控制台,这不会打印任何内容。我希望看到 ReferenceError: baz is not defined 出现在某处

我们不应该看到东西吗?这是我错过的 promise 规范的一部分吗?

更新:澄清:这发生在没有任何第三方模块的 Chrome 36 的 V8 中。

最佳答案

是的,这是 promise 实现面临的问题。但是,您选择的两个都失败了。事实上 - 在你的情况下错误被吞没了,事实上你不会得到任何关于这种静默失败的迹象,除非你自己附加一个错误处理程序。

您的选择是:

  • 使用像 Q 一样提供 .done 的库,并手动将 .done 附加到代码中的每个 promise ,以表明您不会将处理程序附加到它。<
  • 使用像 Bluebird 或 When 这样的库来检测未处理的拒绝。

特别是,Bluebird 比原生 promise 更快,而且做得很好。它也是 native promise 的超集,因此您可以根据需要编写使用该子集的代码(尽管它具有更丰富的 API)。您上面的代码记录了 Bluebird 未处理的拒绝。

顺便说一句,Firefox 处理得更好,而且 Firefox native promise 检测未处理的拒绝。

关于javascript - promise 的错误处理程序中的错误丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25409391/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com