我写了很多代码使用此模式,并onPossiblyUnhandledRejection处理类似的例子可以在蓝鸟的documentation发现:返回的拒绝承诺和蓝鸟
var promise4 = Promise.join(promise1, promise2, function (value1, value2) {
// promise 3 needs the values resolved from promise1 and promise2
return promise3(value1, value2);
});
我的错误处理是这样完成的:
Promise.all([
promise4
])
.catch(function (err) {
// handle error
});
问题是,如果promise3被拒绝,它会触发蓝鸟的onPossiblyUnhandledRejection处理程序,因为它在连接到任何承诺链(具有错误处理)之前被拒绝。当没有任何事情发生错误时,这会导致大的错误信息不断被打印出来。
我不知道该怎么做,因为一方面,上面的模式对于构建并发逻辑非常有用,而且很容易理解,但另一方面,我不想简单地重写onPossiblyUnhandledRejection,因为如果我确实忘记处理某些事情,它可能会有用。
bluebird's documentation样的地址的这个问题,在一定程度上使得它听起来好像上面的图案是一个奇怪的一个:
“如果你因为某些原因代码需要趁虚而入并附加错误处理的一些承诺在承诺挂了一段时间后,你会看到恼人的消息“
我的”某些原因“是我需要构建高度并发的软件。这是我接近这种问题的根本缺陷吗?如果不是,我应该如何解决这个问题而不完全删除这些警告?
请在代码中显示您实际将错误处理程序附加到链中的位置(以及何时)。 – Bergi 2015-02-10 19:13:09
所以你的错误处理程序被称为*和*你几乎在同一时间得到未处理拒绝事件?这听起来像一个错误。 – Bergi 2015-02-10 19:48:05
是的,这发生在我的应用程序的许多地方,但错误总是被成功捕获。如果它改变任何promise3可能是立即被拒绝的东西,例如具有同步逻辑的Promise.try。 – 2015-02-10 19:50:22