2016-02-04 18 views
0

捕獲錯誤是否有這樣做的以下使用藍鳥更好的辦法失信從無極建設

Promise.resolve() 
    .then(function() {return new MyObject(data)}) 
    .then.....etc 
    .catch(function (e){ //handle it}) 

我的MyObject - 和數據從外部系統,這可能是無效的傳入,從而可以打破的承諾鏈。在一個函數中包裝對象的創建似乎真的很混亂。有什麼樣

Promise.something(new MyObject(data)) 
     .then().... 
     .catch.... 

而且 - 節點0.10所以沒有LAMBDA,使其看起來更整潔:-(

+0

如果你從前面的承諾中獲得數據,你需要使用'then'這樣或那樣的方法。你到底在找什麼?一種減少函數(數據){返回新的MyObject(數據)}'的方法? – zzzzBov

+0

你可能在尋找['Promise.resolve(new MyObject(data))'](http://bluebirdjs.com/docs/api/promise.resolve.html)來從'MyObject'生成一個promise嗎? – zzzzBov

+0

@zzzzBov聽起來像OP希望承諾能夠捕捉到新的MyObject可能拋出的任何異常(@Silver,是嗎?) – ssube

回答

2

不是Promise.something(new MyObject(data)),它運行創造了無極new MyObject以前,使用長形的承諾構造函數:拋出同步承諾構造函數或內

new Promise(function (resolve) { 
    resolve(new MyObject(data)); 
}.then(foo).catch(bar); 

例外回調將被捕獲,處理(包括類型匹配),併發送到catch處理程序(Bluebird docs)。

0

肯定有,Promise.try,你也應該在節點中使用箭頭的短函數表達式:

Promise.try(() => new MyObject(data)); 

像在瀏覽器中,你可以使用a transpiler對於舊版本的節點。

此外,我不會在構造函數中執行IO,但這是另一回事。通過ssube的其他答案解釋了爲什麼需要構造函數,因爲在實際調用方法之前發生異常。