2016-10-14 77 views
0

當某個函數不能解決承諾並輸出關於它的消息時,是否有辦法捕捉該案例?Nodejs承諾 - 如何捕捉不解決承諾的函數?

這是我的代碼:

var Q = require("q"); 

var badFunction = function (resolve, reject, notify) { 
    console.log('bad function'); 
} 

var q = Q.Promise(badFunction) 
.then(function (output) { 
    console.log('bad function returned: ' + output); 
}).catch(function (err) { 
    console.log('catch'); 
    throw err; 
}).done(); 

這是我在控制檯中看到:

Polinas-MacBook:me3 polina$ node spike 
bad function 
Polinas-MacBook:me3 polina$ 
+4

你沒有解決承諾,或從'重型功能'返回新承諾 –

+0

謝謝@ sterling-archer。更新我的問題。 – PolinaC

回答

0

爲了確保一切都完成後,我要在我的控制檯應用程序的結束做條件q.inspect()。狀態循環。

0

嘗試

function run(){ 
return new Promise((resolve, reject) => { 
    heavyFunction.then(() => { 
    ...some code 
    console.log(heavy code); 
    resolve(); 
    }).catch(error) => { 
    ... some code 
    console.log(error); 
    reject(error); 
    }); 
}); 
+0

還有一個很酷的軟件包,也叫做request-promise,它需要很多額外的代碼才能使用promise。我會將其添加到我的回答上面... –

0

你將永遠要麼解決或拒絕承諾。否則,它將永遠不會調用then或catch塊。如果你想對錯誤做出反應,只需撥打reject(err)即可。

var badFunction = function (resolve, reject, notify) { 
    console.log('bad function'); 
    reject(new Error('an error')); 
} 
+0

@johannes_merz,它可以永遠不會打電話或捕捉。我期望這個過程永不結束。但它結束了。 – PolinaC

+0

那你想要什麼?檢查承諾是否仍在等待? –

+0

@johannes_merz,我喜歡這個方向。我怎樣才能做到這一點?我在'done();'後放了console.log(q)''並得到'未定義'。 – PolinaC