我正在将一些代码从bluebird转换为本机Promises,而且即使没有定义.catch()
,本机承诺也会吞下错误,这让我感到非常恼火。它会使调试不可能除非你在每个承诺上放置catch()
。
所以我的问题 - 有人有解决方案吗?可能性包括告诉承诺投掷的某种方式,或全球捕捉它们的方式,或......?
答案 0 :(得分:3)
我写了并且Petka(蓝鸟的作者)实现了(我们有帮助:)这个功能为Node稍微回来了。我不认为你应该从bluebird切换(它更快,并且有更丰富的API),但如果你想 - 请使用拒绝钩子:
process.on('unhandledRejection', function(p, reason) {
// handle error here, all "swallowed" errors get here
});
这需要io.js 1.4+或现代NodeJS(3.0+),这不会在节点0.12中工作,所以最好使用现代版本或继续使用bluebird(它也与此事件兼容)< / p>