Per rendere questa domanda utile a quante più persone possibile, escluderò i miei specifici dettagli di implementazione oltre al fatto che sto usando la libreria di promessa Bluebird con Node + Express sotto .Bluebird Promise Chains: 'Catch' con Risultato
Quindi, diciamo che ho la seguente catena (dove P
restituisce una promessa, e res
è l'oggetto di risposta HTTP espresso):
P().then(function(){
// do nothing if all went well (for now)
// we only care if there is an error
}).catch(function(error){
res.status(500).send("An error occurred");
}).then(function(){
return P();
}).then(function(pVal1){
return [pVal1, P()];
}) // TODO: catch an error from P() here and log pVal1
.spread(function(pVal1, pVal2){
if(pVal1 === pVal2) {
console.log("Success!");
} else {
console.log("Failure");
}
});
Dove ho messo il commento TODO
sopra è dove vorrei Mi piace prendere un errore che potrebbe verificarsi dalla mia chiamata a P
. Se riscontro un errore, desidero registrare pVal1
e quindi inviare un errore 500, come si fa nel primo rilevamento. Tuttavia, non sono sicuro che ciò sia possibile con il modo in cui strutturo la mia catena.
Credo di dover fare un po 'di "ramificazione", ma non credo di capire questo concetto abbastanza bene da fermare la natura asincrona di JavaScript da ottenere il meglio di me! Come tale, ogni aiuto è molto apprezzato.
Se sto facendo questo torto nella sua interezza, però, per favore fatemelo sapere! – nmagerko
@torazaburo no non lo è. –
@BenjaminGruenbaum Perché no? –