Wciąż jestem dość nowy w obietnicach i obecnie używam Bluebird, jednak mam scenariusz, w którym nie jestem do końca pewien, jak najlepiej sobie z tym poradzić.
Na przykład mam łańcuch obietnic w aplikacji ekspresowej, takiej jak ta:
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" });
});
Więc zachowanie, którego szukam, to:
- Przechodzi do konta za pomocą identyfikatora
- Jeśli w tym momencie nastąpi odrzucenie, zbombarduj i zwróć błąd
- Jeśli nie ma błędu, przekształć dokument zwrócony do modelu
- Sprawdź hasło w dokumencie bazy danych
- Jeśli hasła nie pasują, zbombarduj i zwróć inny błąd
- Jeśli nie ma błędu, zmień hasła
- Następnie powróć sukces
- Jeśli coś poszło nie tak, zwróć 500
Więc obecnie zaczepy nie wydają się zatrzymywać łańcucha, a to ma sens, więc zastanawiam się, czy jest sposób, abym w jakiś sposób zmusił łańcuch do zatrzymania się w określonym punkcie na podstawie błędów, czy jest lepszy sposób Skonstruować to tak, aby uzyskać jakąś formę zachowania rozgałęzień, jak w przypadku if X do Y else Z
.
Każda pomoc byłaby świetna.