Consumindo Promises: then(), catch() e finally()
Descubra como lidar com o sucesso, o erro e a finalização de uma Promise.
Na lição anterior, você viu o que é uma Promise.
Agora vamos focar em como consumir essa Promise no dia a dia.
Pense assim: a Promise é como um pedido que você fez.
Os métodos abaixo são as etapas de acompanhamento:
then()→ quando deu certocatch()→ quando deu errofinally()→ quando terminou, independente do resultado
1) then() — tratando sucesso
O then() roda quando a Promise é resolvida com sucesso.
const promessa = Promise.resolve("Dados carregados!");
promessa.then(function (resultado) {
console.log(resultado); // Dados carregados!
});
2) catch() — tratando erro
O catch() roda quando a Promise é rejeitada.
const promessaComErro = Promise.reject("Falha ao carregar dados.");
promessaComErro.catch(function (erro) {
console.log(erro); // Falha ao carregar dados.
});
3) finally() — sempre executa
O finally() roda no final, com sucesso ou erro.
Promise.resolve("OK")
.then(function (res) {
console.log(res);
})
.catch(function (err) {
console.log(err);
})
.finally(function () {
console.log("Processo finalizado.");
});
Muito útil para esconder loading, encerrar animação, liberar botão etc.
Encadeando corretamente
Você pode encadear vários then() para transformar dados em etapas:
Promise.resolve(10)
.then(function (n) {
return n * 2; // 20
})
.then(function (n) {
return n + 5; // 25
})
.then(function (resultadoFinal) {
console.log(resultadoFinal); // 25
})
.catch(function (erro) {
console.log("Erro:", erro);
})
.finally(function () {
console.log("Fim da execução");
});
Erro em qualquer etapa cai no catch()
Se alguma etapa lançar erro, o catch() captura:
Promise.resolve("início")
.then(function () {
throw new Error("Algo deu errado no meio do caminho");
})
.then(function () {
console.log("Essa etapa não roda");
})
.catch(function (erro) {
console.log("Erro capturado:", erro.message);
});
Boas práticas
- Sempre tenha
catch()em operações assíncronas reais. - Use
finally()para ações de limpeza/finalização. - Retorne valores dentro de
then()quando quiser encadear. - Evite misturar muita lógica em um único
then().
Resumo da lição
then()trata sucesso.catch()trata falha.finally()sempre executa no fim.- Juntos, eles deixam o fluxo assíncrono mais claro e organizado.