2
我在node.js中使用promise對象。我有一個目標:承諾對象的錯誤鏈令人困惑
var Send = {
send(post_ids) {
return Post.findById(post_ids)
.then((posts) => {
return sendArticlesToWechat(setupArticles(posts)); // sendArticlesToWechat is also a promise
})
.then((result) => {
console.log("RESULT: " + result);
})
.catch((err) => {
console.error("SEND ERROR: " + err);
return err;
});
},
}
export default Send;
,並調用它在另一個文件的方法:當發生錯誤時
Send.send(req.body)
.then((result) => {
console.log("CALL SEND: " + result);
})
.catch((err) => {
console.error(err);
});
,我有兩個輸出:
SEND ERROR: ERROR: // error message
CALL SEND: ERROR: // error message
在sendArticlesToWechat()
出現此錯誤函數返回。因爲這也是一個承諾,所以我可以catch
其外部的錯誤。這是我的預期。
當我打電話給Send.send()
時,我預計會得到catch()
中的錯誤,但錯誤出現在then()
方法中。
根據輸出結果,錯誤確實從前面的catch()
返回,爲什麼我不能保留它在catch()
?
是的,它的工作原理。謝謝。那麼你認爲哪一個更好?刪除catch()或throw err? –
這可能會有所不同,但在這種情況下,我會用'throw err'去。我會在'Send'對象中執行日誌記錄,以防調用代碼忘記寫入catch()。這樣,至少日誌會顯示發生錯誤。 – pgreen2