2016-06-21 67 views
0

我簡化了下面代碼中的場景,因爲我沒有空間來解釋我的用例,但基本上我從「趕上「的承諾塊。我怎樣才能得到從該catch塊傳遞的錯誤(在下面的例子中,我想從我用代碼包裝的「try/catch」的外部「catch」塊中報告錯誤):「catch new Error()」catch catch block context

var p = new Promise(function(resolve, reject) { 
 
    setTimeout(function() { 
 
    reject(); 
 
    }, 1000); 
 

 

 
}); 
 

 
try { 
 
    p.then(function() { 
 
    console.log('promise resolved'); 
 
    }).catch(function() { 
 
    throw new Error('I want to get out of this catch block!'); 
 
    }); 
 
} catch (err) { 
 
    console.log('I want to report the error from here' + err.message); 
 
}

+2

'try..catch'是一個同步語句,你不能那樣做。你可以鏈接另一個'.catch()' – elclanrs

+0

我已經回滾了你最近的編輯。你問了一個可理解的問題,得到了你接受的答案。只要有答案能夠真正解決問題中表達的問題,特別是一旦有*接受的答案,社區就不會看到明顯的改變。此外,新的問題是[這一個]的副本(http://stackoverflow.com/questions/26571328/how-do-i-properly-test-promises-with-mocha-and-chai)。只要回覆承諾:摩卡將拒絕作爲失敗。 – Louis

+0

我的不好。我想我仍然需要一個答案,但後來我找到了答案。 – mags

回答

1

catch處理的承諾是一樣的承諾本身是異步的,所以你不能恢復到從中流同步/異常控制。直到/catch已經退出,您傳遞到.catch的功能可能不會被調用。

+0

是的,你是對的。我的例子很糟糕。我將編輯我的示例。我正在使用mocha.js進行測試,我希望將錯誤傳遞給測試塊。測試是異步的。 – mags

+0

@mags在這種情況下,您需要將它傳遞給mocha提供的'done'回調函數。我敢打賭,已經有一個這樣的例子,它可能會幫助你。 – ssube

+0

是的,我實際上試圖讓它返回爲「掛起」。我認爲我需要做(新的待定())。我會嘗試。 – mags