我寫了很多代碼使用此模式,並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