Sono ancora abbastanza nuovo alle promesse e attualmente sto usando bluebird, tuttavia ho uno scenario in cui non sono abbastanza sicuro di come gestirlo al meglio.
Quindi, ad esempio, ho una catena di promesse all'interno di un'app express in questo modo:
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" });
});
Quindi il comportamento che cerco è:
- Va a ottenere l'account dall'ID
- Se c'è un rifiuto a questo punto, bombarda e restituisci un errore
- Se non ci sono errori, convertire il documento restituito in un modello
- Verificare la password con il documento del database
- Se le password non corrispondono, bombardare e restituire un errore diverso
- Se non ci sono errori, modificare le password
- Quindi restituisci il successo
- Se qualcos'altro è andato storto, restituisci un 500
Quindi attualmente le catture non sembrano fermare il concatenamento, e questo ha senso, quindi mi chiedo se c'è un modo per me di forzare in qualche modo la catena a fermarsi a un certo punto in base agli errori, o se esiste un modo migliore strutturarlo per ottenere una qualche forma di comportamento di ramificazione, come nel caso di if X do Y else Z
.
Qualsiasi aiuto sarebbe grande.