使用node
,restify
和bluebird 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() - 事件结束了承诺执行流程?
答案 0 :(得分:1)
catch
假设您正在处理错误。如果你不是,并希望稍后再处理catch
,请重新抛出它:
.catch((error) => {
res.code(401).error(error.message);
next();
throw error;
});