Oi Paula, tudo bem?
A confusão pode surgir porque, apesar de ser assíncrono, o tratamento de erros com .catch
parece sincronizado, pois parece que precisamos esperar o .then
terminar para então tratar o erro. No entanto, o que acontece na realidade é um pouco diferente.
Quando usamos Promises no JavaScript, o código dentro do .then
é executado quando a Promise é resolvida, e o código dentro do .catch
é executado quando a Promise é rejeitada. Esses dois blocos de código não são executados ao mesmo tempo, mas também não precisamos esperar que um termine para começar o outro. Eles são, de certa forma, independentes um do outro.
Imagine que você pediu a um amigo para comprar um livro para você. Você não precisa esperar que ele compre o livro para continuar fazendo outras coisas, certo? Isso é assincronismo. Agora, você também deu a ele instruções sobre o que fazer se o livro estiver esgotado (isso seria o nosso .catch
). Você não precisa esperar ele tentar comprar o livro para dar a ele essas instruções. Se o livro estiver esgotado, ele já sabe o que fazer. Isso é o tratamento de erros com .catch
.
Então, apesar de parecer que estamos esperando o .then
para executar o .catch
, na verdade estamos apenas preparando o que deve ser feito em cada situação, seja ela a resolução ou a rejeição da Promise.
Espero ter ajudado você a entender melhor.
Um abraço e bons estudos.