【发布时间】:2014-11-22 11:10:14
【问题描述】:
我对 Promise 还很陌生,目前正在使用 bluebird,但是我有一个场景,我不太确定如何最好地处理它。
例如,我在一个 express 应用程序中有一个承诺链,如下所示:
repository.Query(getAccountByIdQuery)
.catch(function(error){
res.status(404).send({ error: "No account found with this Id" });
})
.then(convertDocumentToModel)
.then(verifyOldPassword)
.catch(function(error) {
res.status(406).send({ OldPassword: error });
})
.then(changePassword)
.then(function(){
res.status(200).send();
})
.catch(function(error){
console.log(error);
res.status(500).send({ error: "Unable to change password" });
});
所以我追求的行为是:
- 通过 Id 获取帐户
- 如果此时出现拒绝,则轰出并返回错误
- 如果没有错误将返回的文档转换为模型
- 用数据库文档验证密码
- 如果密码不匹配,则轰出并返回不同的错误
- 如果没有错误,请更改密码
- 然后返回成功
- 如果还有其他问题,请返回 500
所以目前的捕获似乎并没有停止链接,这是有道理的,所以我想知道是否有办法让我根据错误以某种方式强制链停止在某个点,或者是否有一种更好的方式来构造它以获得某种形式的分支行为,因为有一个 if X do Y else Z 的情况。
任何帮助都会很棒。
【问题讨论】:
-
可以重投还是提前归还?
标签: javascript node.js promise bluebird