Я до сих пор довольно новичок в 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" });
});
Итак, поведение, за которым я следую, следующее:
- Идет, чтобы получить учетную запись по идентификатору
- Если в этот момент есть отклонение, выполните вскрытие и верните ошибку.
- Если нет ошибки, конвертируйте документ, возвращенный в модель
- Проверьте пароль с документом базы данных
- Если пароли не совпадают, тогда вылетают и возвращают другую ошибку.
- Если нет ошибки, пароли
- Затем верните успех
- Если что-то еще пошло не так, верните 500
Таким образом, в настоящее время уловы, похоже, не останавливают цепочку, и это имеет смысл, поэтому мне интересно, есть ли способ заставить меня каким-то образом заставить цепочку остановиться в определенной точке на основе ошибок или если есть лучший способ структурировать это, чтобы получить некоторую форму поведения ветвления, так как существует случай if X do Y else Z
.
Любая помощь будет большой.