Javascript 承诺对象混淆';s误差链
我正在node.js中使用promise对象。我有一个目标:Javascript 承诺对象混淆';s误差链,javascript,node.js,promise,Javascript,Node.js,Promise,我正在node.js中使用promise对象。我有一个目标: var Send = { send(post_ids) { return Post.findById(post_ids) .then((posts) => { return sendArticlesToWechat(setupArticles(posts)); // sendArticlesToWechat is also a 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()
函数中。因为这也是一个承诺,所以我可以捕捉它的错误。这是我所期望的
调用Send.Send()
时,我希望在catch()
中得到错误,但错误出现在then()
方法中
根据输出,错误确实是从上一个catch()
返回的,为什么我不能将其保留在catch()
中?问题在于您的最终catch()
。因为您返回err
,所以您导致承诺得到解决而不是拒绝。如果要返回被拒绝的承诺,请删除catch()
或重新抛出err
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;//converts from reject to resolved
throw err;
});
},
}
export default Send;
是的,它起作用了。谢谢那么你认为哪一个更好?删除可能不同的catch()
或throw err
?但在这种情况下,我会选择throw err
。我会在您的Send
对象中进行日志记录,以防调用代码忘记编写catch()
。这样,至少日志会显示发生了错误。