2014-09-04 120 views
0

内返回的承诺时,我有以下代码:可能未处理的错误承诺

SuccessfulPromise().then(function() { 
    return rejectedPromise(); 
}).catch(function(err) { 
    console.log(err); 
}); 

是不是故意的,我得到上述错误信息或者是一个错误?该错误在catch块中得到处理,虽然我得到了错误消息Possibly unhandled Error

+0

你能举个实际的例子吗? – thefourtheye 2014-09-04 10:17:20

+0

在then函数中成功承诺后,我返回Promise.reject()的拒绝承诺。它正在测试中,所以一切都被嘲笑了。 – Blacksonic 2014-09-04 10:23:35

+0

外部catch块捕获返回的拒绝诺内功能,但仍然可能未处理的错误到控制台 – Blacksonic 2014-09-04 10:24:17

回答

1

问题出在 sinon.stub().returns(Promise.rejected('error'))。 承诺在分配给错误处理程序之前得到执行。

+0

再现哦,所以它被拒绝的承诺和它被重复了几次? – 2014-09-04 12:45:41

+0

它没有重复,只是没有得到它的错误处理程序时 – Blacksonic 2014-09-05 08:56:58

+0

你能创建一个完整的可验证的代码示例,并请打开一个问题(或更新您关闭的问题,我们将重新打开它?) – 2014-09-05 09:03:39

2

你说:

的问题是与sinon.stub().returns(Promise.rejected('error'))。承诺在分配给错误处理程序之前被执行。

我想指出这是正确的。当承诺被拒绝时,Bluebird会检查链条,看看是否有错误处理程序会处理它,如果不是,将会触发事件possiblyUnhandledRejection。因此,如果拒绝发生在分配处理程序之前,您会收到“虚假报告”。

但是!有一个原因叫做可能是:一旦你给做了分配一个处理程序,系统仍然检测到该错误的处理,然后它将触发UnhandledRejectionHandled事件as documented。您可以使用后一个事件,以确保您不会受到处理它们之前的错误未处理拒绝的影响。

+0

谢谢,这让我回答了我的问题。我结束了重写我的'onPossiblyUnhandledRejection'事件处理程序不打印任何东西。 – 2014-11-18 06:35:54

+0

乐于帮助。 :) – Avaq 2014-11-18 14:02:19

相关问题