什么是“误报”被拒绝的承诺? possiblyUnhandledRejection?

时间:2016-11-28 13:54:41

标签: javascript node.js promise bluebird

我在节点中使用Bluebird promise库。

我的代码中有一个部分可以捕获被拒绝的承诺并且不会重新抛出它。

“unhandledRejection”仍然在之后的同一个承诺中被触发 - 为什么它已经被处理了?

什么是“possibleUnhandledRejection”?

http://bluebirdjs.com/docs/api/error-management-configuration.html

  

但是因为可以处理被拒绝的承诺   在不确定的未来的时间,一些编程模式将会   导致误报。因为这样的编程模式不是   必须和总是可以重构,永远不会导致误报,   我们建议这样做以尽可能简化调试。

这里提到的“编程模式”是什么?

这是否与此模式相关(一个被拒绝的承诺链接两次或更多,其中一个没有捕获): https://github.com/petkaantonov/bluebird/issues/695#issuecomment-155373565

由于

1 个答案:

答案 0 :(得分:3)

上述编程实践只涉及在错误发生后才安装错误处理程序。举个例子,拿

var a = Promise.delay(Math.random()*1000)
        .then(function(){ throw new Error(); });
var b = Promise.delay(Math.random()*1000)
        .then(function() { return a; })
        .catch(function() { console.log("It's ok."); });

在大约一半的情况下,a的延迟时间比b短,我们会收到unhandledRejection警告。< / p>

  

这是否与一个被拒绝的承诺被链接两次或更多并且其中一个没有捕获的模式有关?

不,那只是一个错误。所有分支都需要有一个错误处理程序。