Todavía soy bastante nuevo en las promesas y estoy usando bluebird actualmente, sin embargo, tengo un escenario en el que no estoy muy seguro de cómo tratarlo mejor.
Entonces, por ejemplo, tengo una cadena de promesa dentro de una aplicación express como esta:
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" });
});
Entonces el comportamiento que busco es:
- Va a obtener cuenta por ID
- Si hay un rechazo en este punto, bombardea y devuelve un error
- Si no hay error, convierta el documento devuelto a un modelo
- Verifique la contraseña con el documento de la base de datos
- Si las contraseñas no coinciden, bombardea y devuelve un error diferente
- Si no hay error, cambie las contraseñas
- Luego devuelve el éxito
- Si algo más salió mal, devuelve 500
Entonces, las capturas actuales no parecen detener el encadenamiento, y eso tiene sentido, por lo que me pregunto si hay una manera de forzar de alguna manera a la cadena a detenerse en un cierto punto en función de los errores, o si hay una mejor manera estructurar esto para obtener algún tipo de comportamiento de ramificación, como es el caso de if X do Y else Z
.
Cualquier ayuda sería genial.