内返回的承诺时,我有以下代码:可能未处理的错误承诺
SuccessfulPromise().then(function() {
return rejectedPromise();
}).catch(function(err) {
console.log(err);
});
是不是故意的,我得到上述错误信息或者是一个错误?该错误在catch块中得到处理,虽然我得到了错误消息Possibly unhandled Error
。
内返回的承诺时,我有以下代码:可能未处理的错误承诺
SuccessfulPromise().then(function() {
return rejectedPromise();
}).catch(function(err) {
console.log(err);
});
是不是故意的,我得到上述错误信息或者是一个错误?该错误在catch块中得到处理,虽然我得到了错误消息Possibly unhandled Error
。
问题出在 sinon.stub().returns(Promise.rejected('error'))
。 承诺在分配给错误处理程序之前得到执行。
再现哦,所以它被拒绝的承诺和它被重复了几次? – 2014-09-04 12:45:41
它没有重复,只是没有得到它的错误处理程序时 – Blacksonic 2014-09-05 08:56:58
你能创建一个完整的可验证的代码示例,并请打开一个问题(或更新您关闭的问题,我们将重新打开它?) – 2014-09-05 09:03:39
你说:
的问题是与
sinon.stub().returns(Promise.rejected('error'))
。承诺在分配给错误处理程序之前被执行。
我想指出这是正确的。当承诺被拒绝时,Bluebird会检查链条,看看是否有错误处理程序会处理它,如果不是,将会触发事件possiblyUnhandledRejection
。因此,如果拒绝发生在分配处理程序之前,您会收到“虚假报告”。
但是!有一个原因叫做可能是:一旦你给做了分配一个处理程序,系统仍然检测到该错误的处理,然后它将触发UnhandledRejectionHandled
事件as documented。您可以使用后一个事件,以确保您不会受到处理它们之前的错误未处理拒绝的影响。
谢谢,这让我回答了我的问题。我结束了重写我的'onPossiblyUnhandledRejection'事件处理程序不打印任何东西。 – 2014-11-18 06:35:54
乐于帮助。 :) – Avaq 2014-11-18 14:02:19
你能举个实际的例子吗? – thefourtheye 2014-09-04 10:17:20
在then函数中成功承诺后,我返回Promise.reject()的拒绝承诺。它正在测试中,所以一切都被嘲笑了。 – Blacksonic 2014-09-04 10:23:35
外部catch块捕获返回的拒绝诺内功能,但仍然可能未处理的错误到控制台 – Blacksonic 2014-09-04 10:24:17