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