Manipulação de várias capturas na cadeia de promessas

Ainda sou bastante novo nas promessas e estou usando o bluebird atualmente, no entanto, tenho um cenário em que não tenho muita certeza de como lidar melhor com isso.

Por exemplo, eu tenho uma cadeia de promessas em um aplicativo expresso da seguinte forma:

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" });
        });

Então, o comportamento que eu busco é:

Vai obter a conta por IDSe houver uma rejeição neste momento, bombardeie e retorne um erroSe não houver erro, converta o documento retornado para um modeloVerifique a senha com o documento do banco de dadosSe as senhas não corresponderem, bombardeie e retorne um erro diferenteSe não houver erro, altere as senhasEntão retorne o sucessoSe algo mais der errado, retorne 500

Portanto, atualmente, as capturas não parecem interromper o encadeamento, e isso faz sentido, por isso estou me perguntando se existe uma maneira de forçar de alguma forma a cadeia a parar em um determinado ponto com base nos erros ou se há uma maneira melhor estruturar isso para obter algum tipo de comportamento de ramificação, como existe um caso deif X do Y else Z.

Qualquer ajuda seria ótimo.

questionAnswers(6)

yourAnswerToTheQuestion