Javascript 承诺 .catch 仍然调用 final variable.then

Javascript promises .catch still calling final variable.then

本文关键字:final variable then 调用 承诺 catch Javascript      更新时间:2023-09-26

使用noderestifybluebird promises以及睡眠不足的头脑:

let chain = Promise.try(() => {
    return AsyncCall(auth_token).then(result => {
        if (!result)
            throw new Error('AUTH_TOKEN_ERROR');
        } else {
            return facebook_data;
        }
    });
}).catch((error) => {
    res.code(401).error(error.message);
    next();
});
chain.then((result) => {
    // Gets called even though we throw the error.
});

我的问题是我真的很喜欢"结束"承诺链的chain.then()-方法(为了可读性),但即使.catch收到错误,它也会被调用。我意识到我可以将最终的 .then() 设置为第一个链块,但我想了解这一点。

如何保持相同的代码结构,但让 .catch() 事件结束承诺执行流程?

catch假设您正在处理错误。如果你不是并希望在以后的catch处理它,请像这样重新抛出它:

.catch((error) => {
    res.code(401).error(error.message);
    next();
    throw error;
});