Na aula anterior, aprendemos sobre Callbacks e vimos que eles resolvem o problema da assincronicidade, mas podem deixar o código difícil de ler e manter quando se acumulam.

Para resolver isso, o JavaScript introduziu um conceito mais organizado e poderoso: as Promises.

🎯 Objetivo da aula

Ao final desta aula, você será capaz de:

  • Entender o que é uma Promise
  • Compreender os estados de uma Promise
  • Criar e consumir Promises
  • Usar then e catch
  • Evitar o Callback Hell

O que é uma Promise?

Uma Promise representa um valor que ainda não existe, mas que estará disponível no futuro.

Ela é uma promessa de que algo vai acontecer — ou dar certo, ou dar errado.

É como pedir algo em um restaurante:

  • Você faz o pedido
  • A cozinha prepara
  • Você recebe o prato ou um aviso de problema

Os estados de uma Promise

Uma Promise pode estar em três estados:

  • pending → em andamento
  • fulfilled → resolvida com sucesso
  • rejected → rejeitada com erro

Uma vez resolvida ou rejeitada, ela não muda mais.

Criando uma Promise

Uma Promise é criada usando o construtor Promise, que recebe uma função com dois parâmetros:

  • resolve → quando tudo dá certo
  • reject → quando algo dá errado
 
  const promessa = new Promise((resolve, reject) => 
  { 
    const sucesso = true;
    if (sucesso) 
      {
        resolve("Operação concluída com sucesso");
      } else 
      {
        reject("Algo deu errado");
      }
  });

Consumindo uma Promise

Para usar o valor de uma Promise, utilizamos then e catch.

 
  promessa .then(resultado => 
  { 
    console.log(resultado); 
  }) .catch(erro => 
  { 
    console.log(erro); 
  }); 
 
    console.log(resultado); 
    // Saída será "Operação concluída com sucesso" 

Promise com atraso (exemplo real)

Vamos simular uma tarefa que demora, usando setTimeout.

 
      function buscarDados() 
      { 
        return new Promise((resolve) => 
        { 
          setTimeout(() => 
          { 
            resolve("Dados carregados"); 
          }, 2000); 
        }); 
      }
      buscarDados().then(dados => 
      {
        console.log(dados);
      });
 
  console.log(dados); 
  // Saída será "Dados carregados" (após 2 segundos) 

Encadeando Promises

Uma das grandes vantagens das Promises é poder encadeá-las:

 
    buscarDados() .then(dados => 
    { 
      console.log(dados); return "Processando dados"; 
    }) .then(mensagem => 
    { 
      console.log(mensagem); 
    }); 
 
      console.log(dados); 
      // Saída será "Dados carregados" 
      console.log(mensagem); 
      // Saída será "Processando dados" 

Tratando erros com catch

Se qualquer erro acontecer no encadeamento, o catch é chamado:

 
        Promise.reject("Erro inesperado") .then(() => 
        { 
          console.log("Isso não será executado"); 
        }) .catch(erro => 
        { 
          console.log(erro); 
        }); 
 
          console.log(erro); 
          // Saída será "Erro inesperado" 

Por que Promises são melhores que callbacks?

  • Código mais legível
  • Menos indentação
  • Tratamento de erro centralizado
  • Fluxo mais previsível
Promises resolvem o Callback Hell, mas ainda podem ficar verbosas em códigos grandes.

Resumo da aula para nunca mais esquecer

  • Promise é um contrato com o futuro enquanto uma função simples é execução no presente
  • Pode ser resolvida ou rejeitada
  • Usa then e catch
  • Permite encadear operações assíncronas
  • É base para async e await

Na próxima aula, vamos aprender a forma mais moderna e legível de trabalhar com Promises: async e await.


HARDWARE

Entendendo o seu computador

O que há dentro do meu computador?

Existem alguns componentes fundamentais presentes dentro do seu computador e é muito importante que você conheça um pouco sobre eles, seja para argumentar com algum vendedor durante a compra de um novo PC ou para identificar alguma atitude desleal de algum técnico que esteja te passando um orçamento para reparo. Na seção Raio-X aqui do Contém Bits você pode conhecer e entender mais detalhadamente sobre cada componente, ou também pode clicar abaixo no componente que deseja, para conhecê-lo melhor.

  • Gabinetes

  • Placas-Mãe

  • Processadores

  • Memória

  • Fontes

  • Drives Ópticos

  • Discos Rígidos

  • SSD

  • Placas de Som

  • Placas de Vídeo

Você Sabia?

A Máquina de Pascal, criada em 1642 pelo filósofo, físico e matemático francês Blaise Pascal, é reconhecida como o primeiro computador do mundo e ele foi criado com o objetivo de calcular impostos. Saiba mais.


Street Fighter 2, lançado para o Super Nintendo no início dos anos 90, foi o principal responsável pelo aumento nas vendas deste console. Graças ao sucesso do título nos Arcades e à perfeita adaptação ao console, muitos consumidores adquiriram o SNES para jogarem o título em casa. Saiba mais.


Utilizar seu notebook em camas, sofás ou qualquer superfície macia pode obstruir as entradas e saídas de ar, elevando a temperatura e provocando danos a diversos componentes. Utilize-o sempre sobre uma superfície rígida. Saiba mais aqui.


Ao completar o nível 99 do jogo Duck Hunt, para Nintendo, o jogo retorna ao primeiro nível, mas um bug impede que se acerte os patos neste recomeço. Este é um exemplo do que é chamado no mundo dos games de "Kill Screen".


A empresa Take-Two pagou à Infogrames mais de 22 milhões de dólares pelos direitos de Civilization, em novembro de 1994. Ainda sobre este título, Sid Meier, um dos seus fundadores, é o profissional da área dos games mais premiado em todo o mundo.