Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 承诺对象混淆';s误差链_Javascript_Node.js_Promise - Fatal编程技术网

Javascript 承诺对象混淆';s误差链

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

我正在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()
函数中。因为这也是一个承诺,所以我可以
捕捉它的错误。这是我所期望的

调用
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()
。这样,至少日志会显示发生了错误。