2016-11-28 62 views
2

在節點中使用藍鳥承諾庫。什麼是「假陽性」拒絕承諾? possiblyUnhandledRejection?

我在我的代碼中有一個部分捕獲被拒絕的承諾,並且不會重新拋出它。

「未處理的拒絕」仍然會在此後的相同承諾中觸發 - 爲什麼當它已經被處理?

什麼是「可能未處理的拒絕」?

http://bluebirdjs.com/docs/api/error-management-configuration.html

然而,因爲它可以在任何時間 在不確定的未來處理拒絕承諾,一些編程模式將 導致誤報。因爲這種編程模式不是必需的,而且可以始終進行重構,從不會導致誤報, 我們建議儘可能保持調試儘可能簡單。

這裏提到的「編程模式」是什麼?

這是與此相關的模式(一個拒絕承諾被鏈接兩次或更多次,其中一人沒有趕上): https://github.com/petkaantonov/bluebird/issues/695#issuecomment-155373565

感謝

+2

如果您的代碼需要幫助,請告訴我們該部分。 – Bergi

+0

我並不感到驚訝,您遇到了Bluebird文檔的該部分存在問題。這遠非明確。 –

回答

3

所提到的編程實踐涉及到安裝錯誤處理程序後,才該錯誤已經發生。舉個例子,拿

var a = Promise.delay(Math.random()*1000) 
     .then(function(){ throw new Error(); }); 
var b = Promise.delay(Math.random()*1000) 
     .then(function() { return a; }) 
     .catch(function() { console.log("It's ok."); }); 

在大約一半的情況下,a的延遲短於b的,我們會得到一個unhandledRejection警告。

這是涉及到其中一個拒絕承諾被鏈接兩次或更多次,其中一人沒有趕上模式?

不,這只是一個錯誤。所有分支需要有一個錯誤處理程序。

+1

謝謝,那麼在你的例子中,「假陽性」是什麼?並且你知道是否有計劃在本地promise中實現'delay'和'allSettled'方法嗎? –

+0

並且我的理解是正確的,當回調'function(){return a; }'被執行,'a'處於'被拒絕'狀態?所以這就是發生了什麼'function(){return Promise.reject(valueAIsRejectedWith); }' –

+0

對我上面的問題的任何意見,或者我應該創建新的問題? –