Javascript承诺.catch仍在调用final变量。然后

时间:2016-03-10 22:03:17

标签: javascript node.js promise

使用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() - 事件结束了承诺执行流程?

1 个答案:

答案 0 :(得分:1)

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

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