混淆承诺对象的错误链

我在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;