Umgang mit mehreren Fängen in der Versprechenskette

Ich bin noch ziemlich neu in Versprechungen und verwende derzeit Bluebird. Ich habe jedoch ein Szenario, in dem ich nicht ganz sicher bin, wie ich am besten damit umgehen soll.

So zum Beispiel habe ich eine Versprechenskette 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" });
        });

So ist das Verhalten, nach dem ich bin:

Geht, um ein Konto nach ID zu erhaltenWenn es zu diesem Zeitpunkt eine Ablehnung gibt, bombardieren Sie es und geben Sie einen Fehler zurückWenn kein Fehler vorliegt, konvertieren Sie das zurückgegebene Dokument in ein ModellÜberprüfen Sie das Passwort mit dem DatenbankdokumentWenn die Passwörter nicht übereinstimmen, bombardieren Sie sie und geben Sie einen anderen Fehler zurückWenn kein Fehler vorliegt, ändern Sie die Passwörter Dann zurück ErfolgWenn etwas anderes schief gelaufen ist, geben Sie eine 500 @ zurüc

So derzeit scheinen Fänge die Verkettung nicht zu stoppen, und das macht Sinn, also frage ich mich, ob es eine Möglichkeit gibt, die Kette aufgrund der Fehler zu zwingen, an einem bestimmten Punkt anzuhalten, oder ob es eine bessere gibt Art und Weise, dies zu strukturieren, um eine Form von Verzweigungsverhalten zu erhalten, da es einen Fall von @ giif X do Y else Z.

Jede Hilfe wäre toll.

Antworten auf die Frage(6)

Ihre Antwort auf die Frage