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