我对 promises 还是很陌生,目前正在使用 bluebird,但是我有一个场景,我不太确定如何最好地处理它。
例如,我在一个快速应用程序中有一个Promise链,如下所示:
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
.
任何帮助都会很棒。