我对诺言仍然还很陌生,目前正在使用蓝鸟,但是在我不确定如何最好地处理它的情况下。
因此,举例来说,我在Express应用程序中有一个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
。
任何帮助都会很棒。