Promises

Definição

Promise é um objeto que representa o resultado futuro de uma operação assíncrona, que pode ser concluída com sucesso (fulfilled) ou falhar (rejected).

Promises permitem escrever código assíncrono de forma mais legível e encadeável do que callbacks aninhados.
Elas ajudam a evitar o chamado callback hell e são base para o uso de async/await.

Uma promise possui três estados:

  • pending: operação em andamento
  • fulfilled: operação concluída com sucesso
  • rejected: operação falhou

Objetivos do uso de Promises

  • Encadear tarefas assíncronas com clareza.
  • Evitar aninhamento excessivo de callbacks.
  • Tratar erros de forma mais consistente.
  • Representar valores que ainda não estão disponíveis.

Exemplo prático

Vamos simular a leitura de um dado com Promise:

function lerArquivo() {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      const conteudo = "Dados do arquivo";
      resolve(conteudo);
    }, 1000);
  });
}

console.log("Início");

lerArquivo()
  .then((dados) => {
    console.log("Arquivo lido:", dados);
  })
  .catch((erro) => {
    console.error("Erro:", erro);
  });

console.log("Fim da função principal");

Saída esperada

Início
Fim da função principal
Arquivo lido: Dados do arquivo
  • A Promise representa a operação em andamento.

  • O método .then() define o que fazer quando a operação for concluída.

  • O método .catch() lida com erros, caso ocorram.

Encadeamento de Promises

Um dos grandes benefícios das Promises é o encadeamento sequencial:

obterUsuario()
  .then((usuario) => buscarPosts(usuario.id))
  .then((posts) => console.log("Posts:", posts))
  .catch((erro) => console.error("Erro:", erro));

Cada .then() recebe o valor resolvido anterior e retorna uma nova promise.

O ciclo de uma Promise

[Cria a promise]
     ↓
[Opera em segundo plano]
     ↓
resolve(valor)  →  executa then()
reject(erro)    →  executa catch()

Comparação com callbacks

Aspecto Callback Promise
Leitura do código Difícil quando há muitos níveis de aninhamento Mais clara e sequencial com .then()
Tratamento de erros Precisa ser implementado em cada função Centralizado com .catch()
Encadeamento Manual, com várias funções aninhadas Encadeável com .then() em sequência
Ordem de execução Menos intuitiva — oculta dentro das funções Mais intuitiva — sequência visível e direta

Observações

  • Promises são o padrão moderno de programação assíncrona em JavaScript.
  • Elas funcionam bem com async/await, que são apenas uma forma mais elegante de lidar com Promises.

Relacionados

Política de Privacidade

Copyright © www.programicio.com Todos os direitos reservados

É proibida a reprodução do conteúdo desta página sem autorização prévia do autor.

Contato: programicio@gmail.com