Ich bin noch ziemlich neu in Versprechungen und benutze derzeit Bluebird, aber ich habe ein Szenario, in dem ich nicht ganz sicher bin, wie ich am besten damit umgehen soll.
So habe ich zum Beispiel eine Versprechen-Kette in einer Express-App wie folgt:
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" });
});
Das Verhalten, nach dem ich bin, ist also:
- Geht, um Konto durch ID zu erhalten
- Wenn es zu diesem Zeitpunkt eine Ablehnung gibt, bombardieren Sie und geben Sie einen Fehler zurück
- Wenn kein Fehler auftritt, konvertieren Sie das zurückgegebene Dokument in ein Modell
- Überprüfen Sie das Kennwort mit dem Datenbankdokument
- Wenn die Passwörter nicht übereinstimmen, bombardieren Sie und geben Sie einen anderen Fehler zurück
- Wenn kein Fehler vorliegt, ändern Sie die Passwörter
- Dann kehren Sie zum Erfolg zurück
- Wenn etwas anderes schief gelaufen ist, geben Sie eine 500 zurück
Derzeit scheinen Fänge die Verkettung nicht zu stoppen, und das macht Sinn. Ich frage mich daher, ob es für mich eine Möglichkeit gibt, die Kette aufgrund der Fehler an einem bestimmten Punkt anzuhalten, oder ob es einen besseren Weg gibt dies zu strukturieren, um irgendeine Form von Verzweigungsverhalten zu erhalten, wie es einen Fall von gibt if X do Y else Z
.
Jede Hilfe wäre großartig.