Promises no Javascript

Javascript
Tempo de leitura: 4 minutos

Promises no Javascript: No JavaScript moderno, as Promises são a principal ferramenta para gerenciar o código assíncrono. Uma Promise é um objeto que atua como um “placeholder” (valor substituto) para o resultado eventual (sucesso ou falha) de uma operação assíncrona.

Elas resolvem os problemas de aninhamento e tratamento de erros dos Callbacks, fornecendo uma estrutura mais clara e encadeável.

1. Os Três Estados de uma Promise

Uma Promise é um objeto de estado finito. Uma vez que o estado muda de pending para fulfilled ou rejected, ele não pode mudar novamente.

EstadoSignificadoComo Transiciona
pendingPendente. A operação assíncrona ainda não terminou.Estado inicial.
fulfilledResolvida/Sucesso. A operação foi concluída com sucesso e retornou um valor.Chama resolve(valor).
rejectedRejeitada/Falha. A operação falhou e retornou um erro.Chama reject(erro).

Exemplo Básico de Criação

Você cria uma Promise manualmente usando o construtor Promise, que recebe uma função executora com dois argumentos: resolve e reject.

JavaScript

const buscarDados = new Promise((resolve, reject) => {
  let sucesso = Math.random() > 0.5;
  
  setTimeout(() => {
    if (sucesso) {
      resolve("Dados carregados!"); // Muda o estado para fulfilled
    } else {
      reject(new Error("Erro de conexão.")); // Muda o estado para rejected
    }
  }, 1000);
});

2. Consumindo Promises: then(), catch() e finally()

Para lidar com o resultado de uma Promise, você usa métodos que se conectam aos seus estados finais.

A. .then()

Usado para agendar uma callback para quando a Promise for resolvida (fulfilled). O .then() aceita dois argumentos: a função de sucesso e, opcionalmente, a função de falha.

JavaScript

buscarDados.then(
  (resultado) => {
    console.log("Sucesso:", resultado); // Lida com o 'resolve'
  },
  (erro) => {
    console.error("Falha:", erro.message); // Lida com o 'reject'
  }
);

B. .catch()

Uma forma mais clara e recomendada de lidar com erros. Ele é um atalho para .then(null, onRejected).

JavaScript

buscarDados
  .then((resultado) => console.log(resultado))
  .catch((erro) => console.error("Erro capturado:", erro.message)); // Lida com qualquer reject anterior

C. .finally()

Executa um código sempre que a Promise é finalizada (seja fulfilled ou rejected). É útil para tarefas de limpeza.

JavaScript

buscarDados.finally(() => {
  console.log("Promise finalizada. O carregamento acabou.");
});

3. Encapsulamento de Promises (Chaining)

A maior vantagem das Promises é o seu encadeamento. Quando um .then() retorna um valor (não uma Promise), o próximo .then() recebe esse valor. Crucialmente, quando um .then() retorna outra Promise, a cadeia pausa e espera que a nova Promise seja resolvida antes de continuar.

Isso elimina o aninhamento profundo:

JavaScript

buscarDados // Promise 1
  .then((dados) => {
    console.log("1. Processado:", dados);
    return dados.toUpperCase(); // Retorna um VALOR, que vai para o próximo .then
  })
  .then((dadosUpper) => {
    console.log("2. Transformado:", dadosUpper);
    return outraFuncaoAssincrona(dadosUpper); // Retorna uma NOVA PROMISE 2. A cadeia PAUSA aqui.
  })
  .then(() => {
    console.log("3. Sucesso após a Promise 2."); // Só executa após a Promise 2 terminar
  })
  .catch((erro) => {
    // Captura qualquer erro de Promise 1, Promise 2, ou de qualquer .then intermediário.
    console.error("Erro na cadeia:", erro);
  });

4. Gerenciando Múltiplas Promises

  • Promise.all(iterable): Espera que todas as Promises no iterable sejam resolvidas. Se qualquer uma for rejeitada, ela rejeita o Promise.all imediatamente. Retorna um Array de resultados.
  • Promise.race(iterable): Retorna o resultado da primeira Promise que for resolvida ou rejeitada.

✅ Conclusão Promises no Javascript

Promises no Javascript: Promises são a fundação moderna da assincronia em JavaScript. Elas substituem o Callback Hell por um fluxo de controle claro, estruturado e encadeável, facilitando o tratamento centralizado de erros via .catch(). Dominar o conceito de Objeto de Valor Futuro e o encadeamento é o passo essencial para escrever código assíncrono profissional.

Toda jornada tem um início, e o início para se tornar um desenvolvedor web é dominar as seguintes tecnologias, que você encontra aqui mesmo:

HTML
HTML
CSS
CSS
Javascript
JavaScript

E se você gosta do nosso conteúdo, não deixe de contribuir adquirindo os serviços e produtos dos nossos apoiadores e empresas que somos associados:

Hospedagem Hostinger
Ofertas Amazon
Amazon Prime
Author: Thiago Rossi
Com mais de 20 anos de jornada na tecnologia, minha trajetória evoluiu do ensino técnico à arquitetura de sistemas complexos. Hoje, foco minha expertise no desenvolvimento de soluções de Inteligência Artificial nativa e análise de dados públicos, utilizando o ecossistema PHP para transformar dados brutos em transparência e eficiência. Como autor e desenvolvedor, acredito na democratização do conhecimento. Essa visão resultou em uma biblioteca de mais de 530 artigos gratuitos, cobrindo desde a base do WebDev e Infraestrutura até os bastidores da indústria de Jogos e IA. No universo de Game Design, sou autor do livro "GDD – O Guia Definitivo" e documento ativamente meus processos através de DevLogs, unindo rigor técnico e criatividade em projetos desenvolvidos com GDevelop 5. Meu compromisso é conectar engenharia de ponta com as reais oportunidades do mercado de tecnologia.