2014-09-04 83 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