1
resposta

Design patter para executar várias funções e tratar erros separadamente

Há algo com promises no Javascript que me incomoda muito. Após um catch ele executa o próximo then. Código exemplo:

fazerAlgo(params)
    .then(() => {
        fazerAlgo
    })
    .catch(() => {
        deuErro
    })
    .then(() => {
        fazerOutroAlgo
    })

No exemplo não importa se a promesa retornada pela a função fazerAlgo vai ser rejeitada ou não, o segundo then sempre será executado

Eu gostaria de saber se há alguma estratégia ou design patter que me permita fazer algo, tratar o erro, fazer algo, tratar erro, fazer algo, tratar erro... mas que me não faça o próximo algo se o anterior deu erro.

Gostaria de uma solução elegante , colocar um if dentro do outro ou um then dentro do outro, não é tão elegante

1 resposta

Oi Jonathan, eu não li a especificação da Promise em si, então minha resposta é mais um chute do que uma certeza absoluta.

A promise permise encadear as chamadas, mas ela vai chamar o catch apenas em caso erro. A ordem que você escreve, não é exatamente a ordem de execucão, nesse caso, ele agrupa todos os thens e executa um após o outro apesar do catch estar ali no meio. Então a promise não vai ser o objeto que vai te ajudar com esse tipo de estratégia de fazer-algo - tratar erro em loop.

Talvez o que você precise seja de uma adaptação em cima do Chain Of Responsability: https://refactoring.guru/pt-br/design-patterns/chain-of-responsibility