Até aqui, já entendemos:

  • Como o JavaScript executa código
  • Call Stack e Execution Context
  • Event Loop
  • Microtasks e Macrotasks

Agora chegou a hora de entender por que Promises existem — e por que async/await não é “mágica”.

🎯 Objetivo da aula

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

  • Entender o problema que Promises resolvem
  • Compreender o estado interno de uma Promise
  • Saber como then, catch e finally funcionam
  • Entender o que o async/await faz por baixo do capô
  • Parar de tratar Promises como “caixa preta”

O problema original: callbacks

Antes das Promises, o JavaScript lidava com assincronicidade usando callbacks.

 
  buscarUsuario(function (usuario) 
  { 
    buscarPedidos(usuario.id, function (pedidos) 
    { 
      buscarDetalhes(pedidos[0], function (detalhes) 
      { 
        console.log(detalhes); 
      }); 
    }); 
  }); 
Isso é o famoso “callback hell”.

Problemas:

  • Código difícil de ler
  • Difícil de tratar erros
  • Difícil de manter

O que é uma Promise?

Uma Promise representa:

um valor que ainda não existe, mas vai existir no futuro (ou falhar).

Ela é um objeto que pode estar em três estados:

  • pending (pendente)
  • fulfilled (resolvida)
  • rejected (rejeitada)
Uma Promise só muda de estado UMA vez.

Criando uma Promise manualmente

 
  const promessa = new Promise((resolve, reject) => 
  { 
    const sucesso = true;
    if (sucesso) 
      {
        resolve("Deu certo!");
      } 
      else 
        {
          reject("Deu errado!");
        }
  });

Consumindo essa Promise:

 promessa .then(resultado => { console.log(resultado); }) .catch(erro => { console.log(erro); }); 
 console.log(resultado); // Saída será: Deu certo! 

O papel do .then()

O then:

  • é chamado quando a Promise é resolvida
  • entra na Microtask Queue
  • não executa imediatamente

Isso conecta diretamente com tudo que vimos sobre Event Loop.

Encadeamento de Promises

 
  Promise.resolve(2) .then(numero => numero * 2) .then(resultado => 
  { 
    console.log(resultado); 
  }); 
 console.log(resultado); // Saída será: 4 
Cada then retorna uma nova Promise.

Tratando erros corretamente

 
  Promise.resolve() .then(() => 
  { 
    throw new Error("Erro inesperado"); 
  }) .catch(erro => 
  { 
    console.log(erro.message); 
  }); 
 console.log(erro.message); // Saída será: Erro inesperado 

Um catch captura qualquer erro anterior no encadeamento.

Então… o que é async/await?

async/await é:

açúcar sintático em cima de Promises.

Nada mais.

Exemplo com async/await

 
  async function buscarDados() 
  { 
    const resultado = await Promise.resolve("Dados carregados"); 
    console.log(resultado); 
  }
  buscarDados();
 console.log(resultado); // Saída será: Dados carregados 

O que o await faz de verdade?

Quando o JavaScript encontra um await:

  • A função é pausada
  • O Call Stack é liberado
  • A Promise continua sendo processada
  • A continuação vira uma microtask
await NÃO bloqueia o JavaScript.

Async/await com try/catch

 
  async function executar() 
  { 
    try { 
      const resultado = await Promise.reject("Falhou"); 
      console.log(resultado); 
    } 
    catch (erro) 
    { 
      console.log(erro); 
    } 
  }

executar();
 console.log(erro); // Saída será: Falhou 

Comparação mental importante

  • Promise → controle explícito
  • async/await → leitura sequencial
  • Ambos usam microtasks
  • Ambos respeitam o Event Loop
async/await não transforma código assíncrono em síncrono — apenas parece.

Resumo da aula para nunca mais esquecer

  • Promises surgiram para resolver o callback hell
  • Uma Promise representa um valor futuro
  • then e catch usam microtasks
  • async/await é açúcar sintático
  • O Event Loop continua mandando em tudo

Na próxima aula, vamos aplicar Promises e async/await em cenários reais, conectando com APIs, erros e fluxo de dados.


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 IBM detém o recorde de patentes em um único ano, atingindo a marca de 4186 registros no ano de 2008. Clique aqui e saiba mais sobre esta gigante do mundo da tecnologia.


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".


Considerando todas as adaptações de jogos de videogame para o cinema, a mais bem sucedida foi Lara Croft: Tomb Raider, lançado em 2001 e que faturou 274 milhões de dólares. Ele foi dirigido por Simon West e estrelado pela bela Angelina Jolie.


A partida mais longa do clássico Space Invaders durou incríveis 38 horas e 32 minutos e esta façanha foi conseguida por um jogador de apenas 12 anos! O jogo, claro, podia ser pausado para alimentação e descanso, mas ainda assim o recorde, estabelecido no dia 02/09/1980, ainda não foi quebrado. Saiba mais.


A empresa Universal City Studios, detentora dos direitos autorais do King Kong, processou a Nintendo logo após o lançamento de Donkey Kong, pois segundo ela, o game violava os seus direitos. Ela venceu o processo e recebeu da Nintendo uma indenização de quase 2 milhões de dólares.