混淆承诺对象的错误链
我在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()
。 因为你return 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;