Até aqui, estudamos cada peça separadamente:

  • Call Stack
  • Event Loop
  • Microtasks e Macrotasks
  • Promises
  • async/await

Agora vamos juntar tudo e responder a pergunta final:

o que realmente acontece quando usamos async/await?

🎯 Objetivo da aula

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

  • Prever a ordem de execução com async/await
  • Entender como await interage com o Event Loop
  • Saber onde microtasks entram no fluxo
  • Evitar bugs de ordem de execução
  • Encerrar o capítulo de assincronicidade com domínio real

Modelo mental definitivo

Guarde este modelo:

  • Código síncrono → Call Stack
  • await → pausa a função
  • Continuação do await → microtask
  • setTimeout e eventos → macrotasks
  • Event Loop → organiza tudo
await não bloqueia o JavaScript — ele reorganiza o fluxo.

Exemplo 1 — async/await básico

 
  async function exemplo() 
  { 
    console.log("Dentro da função");
    await Promise.resolve();
    console.log("Depois do await");
  }
  console.log("Início");
  exemplo();
  console.log("Fim");

Qual será a ordem?

 
  console.log("Início"); // Saída: Início
  console.log("Dentro da função");
  // Saída: Dentro da função
  console.log("Fim");
  // Saída: Fim
  // Continuação do await (microtask)
  // Saída: Depois do await

O que aconteceu aqui?

  • A função começou a executar normalmente
  • Encontrou um await
  • A função foi pausada
  • A continuação virou uma microtask
  • O Call Stack foi liberado

Exemplo 2 — async/await vs setTimeout

 
  async function teste() 
  { 
    console.log("Async início");
    await Promise.resolve();
    console.log("Async fim");
  }
  setTimeout(() => 
  {
    console.log("Timeout");
  }, 0);
teste();
 
  console.log("Async início"); // Saída: Async início
  // Microtask do await
  console.log("Async fim");
  // Saída: Async fim
  // Depois a macrotask
  console.log("Timeout");
  // Saída: Timeout
await sempre tem prioridade sobre setTimeout.

Exemplo 3 — múltiplos awaits

 
  async function fluxo() 
  { 
    console.log("Passo 1");
    await Promise.resolve();
    console.log("Passo 2");
    await Promise.resolve();
    console.log("Passo 3");
  }
fluxo();
 
  console.log("Passo 1"); // Saída: Passo 1
  // Microtask
  console.log("Passo 2");
  // Saída: Passo 2
  // Nova microtask
  console.log("Passo 3");
  // Saída: Passo 3

Cada await cria uma pausa

Cada await:

  • divide a função em partes
  • agenda a continuação como microtask
  • permite que o Event Loop execute outras tarefas

Exemplo 4 — async dentro de evento

 
  button.addEventListener("click", async () => 
  { 
    console.log("Clique");
    await Promise.resolve();
    console.log("Depois do await");
  });
 
  console.log("Clique"); // Saída: Clique
  // Microtask do await
  console.log("Depois do await");
  // Saída: Depois do await
Mesmo em eventos (macrotasks), microtasks mantêm prioridade.

Resumo visual do fluxo

 Call Stack ↓ await → pausa função ↓ Microtask Queue ↓ Event Loop ↓ Continuação da função 

Erro comum: achar que await bloqueia tudo

await NÃO bloqueia o JavaScript inteiro. Ele pausa apenas a função onde está.

Resumo da aula para nunca mais esquecer

  • await pausa a função, não o JavaScript
  • A continuação do await é uma microtask
  • Microtasks têm prioridade sobre macrotasks
  • O Event Loop organiza tudo
  • Agora você consegue prever a execução

Na próxima aula, vamos mudar o foco para outro pilar avançado do JavaScript: Closures avançados.


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?

O título Tetris detém o recorde de jogo mais adaptado de todos os tempos. No total foram mais de 60 plataformas diferentes que receberam alguma versão do quebra-cabeças criado por Alexey Pajitnov. Conheça mais sobre este incrível jogo clicando aqui.


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.


O personagem Mario surgiu pela primeira vez no mundo dos games em um jogo chamado Donkey Kong, lançado em 1981. Mario, que naquela época se chamava Jumpman, não era o personagem principal do jogo, mas ele se tornaria um dos mais famosos personagens do mundo dos games. Saiba mais.


O título Space Invaders, lançado em 1980, fez tanto sucesso em todo o mundo que as pessoas compravam o console Atari apenas para poderem jogá-lo em casa. Saiba mais sobre este incrível título clicando 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".