蓝鸟的异步承诺处理

Connesc

由于某些原因,我得到了Bluebird的承诺,我将异步地附加处理程序。例如:

var promise = Promise.reject(new Error('Handled rejection'));

setImmediate(function () {
    promise.then(console.log, console.error);
});

尽管我的诺言得到了很好的处理,但蓝鸟警告我有未解决的拒绝。

我可以通过同步添加一个空的拒绝处理程序来欺骗它:

promise.catch(function () {});

但是,这看起来确实很hacky。有什么适当的方法来处理这种情况?

编辑:为回应此评论,我在Gist中发布了我的实际用例的更详细的说明它还包含我在等待Bluebird 3.0发行时使用的解决方法。正如本杰明所解释的那样,Bluebird 3.0将带来一个解决方案.suppressUnhandledRejection()

亚伦·杜福(Aaron Dufour)

具体来说您可以使用全局拒绝事件unhandledRejection来静默消耗可能未处理的拒绝。但是,这意味着真正未处理的拒绝也将被静音。

您可以将rejectionHandled与结合使用unhandledRejection,以决定是否处理拒绝。

另外,您可以非常小心地done在每个promise链的末尾进行调用,在这种情况下,您可以放心地忽略可能未处理的拒绝。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章