Ainda sou bastante novo nas promessas e atualmente estou usando o bluebird, no entanto, tenho um cenário em que não tenho certeza de como lidar melhor com isso.
Por exemplo, eu tenho uma cadeia de promessas em um aplicativo expresso da seguinte forma:
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" });
});
Então, o comportamento que eu busco é:
- Vai obter a conta por ID
- Se houver uma rejeição neste momento, bombardeie e retorne um erro
- Se não houver erro, converta o documento retornado para um modelo
- Verifique a senha com o documento do banco de dados
- Se as senhas não corresponderem, bombardeie e retorne um erro diferente
- Se não houver erro, altere as senhas
- Então retorne o sucesso
- Se algo mais der errado, retorne 500
Portanto, atualmente, as capturas não parecem interromper o encadeamento, e isso faz sentido, por isso estou me perguntando se existe uma maneira de forçar de alguma forma a cadeia a parar em um determinado ponto com base nos erros ou se existe uma maneira melhor estruturar isso para obter algum tipo de comportamento de ramificação, como é o caso if X do Y else Z
.
Qualquer ajuda seria ótimo.