我在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()
?
答案 0 :(得分:1)
问题在于你的最终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;