Я все еще новичок в promises и использую bluebird в настоящее время, однако у меня есть сценарий, в котором я не совсем уверен, как с этим лучше всего справиться.
Так, например, у меня есть цепочка обещаний в экспресс-приложении, например:
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
.
Любая помощь была бы замечательной.