Na aula anterior, aprendemos que o JavaScript possui duas filas principais para tarefas assíncronas:

  • Microtask Queue
  • Macrotask Queue

Agora chegou a hora de ver isso acontecendo com exemplos reais, exatamente como você encontra no dia a dia.

🎯 Objetivo da aula

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

  • Identificar microtasks e macrotasks no código
  • Prever a ordem de execução no console
  • Entender como Promises, timeouts e eventos interagem
  • Evitar bugs causados por ordem inesperada de execução

Exemplo 1 — Promise vs setTimeout

Esse é o exemplo mais clássico — e mais importante.

 
  console.log("Início");
  setTimeout(() => 
  {
    console.log("Macrotask");
  }, 0);
  Promise.resolve().then(() => 
  {
    console.log("Microtask");
  });
  console.log("Fim");

Antes de rodar, tente prever a ordem.


   console.log("Início"); // Saída: Início
   console.log("Fim");
   // Saída: Fim
   // Microtasks primeiro
   // Saída: Microtask
   // Depois as macrotasks
   // Saída: Macrotask
Promises sempre têm prioridade sobre setTimeout.

Exemplo 2 — Várias Promises encadeadas

Todas as Promises resolvidas entram na Microtask Queue.

 
  console.log("Início");
  Promise.resolve()
  .then(() => 
  {
    console.log("Microtask 1");
  })
  .then(() => 
  {
    console.log("Microtask 2");
  });
  console.log("Fim");
 
  console.log("Início"); // Saída: Início
  console.log("Fim");
  // Saída: Fim
  // Microtasks executam em sequência
  // Saída: Microtask 1
  // Saída: Microtask 2

Exemplo 3 — setTimeout dentro de Promise

Aqui vemos microtasks criando macrotasks.

 
  Promise.resolve().then(() => 
  { 
    console.log("Microtask");
    setTimeout(() => 
    {
      console.log("Macrotask criada pela microtask");
    }, 0);
  });
 
  Promise.resolve().then(() => 
  { 
    console.log("Microtask"); 
  }); // Saída: Microtask
  // Depois que a microtask termina
  // Saída: Macrotask criada pela microtask

Exemplo 4 — Evento de clique (macrotask)

Eventos do DOM entram como macrotasks.

 
  button.addEventListener("click", () => 
  { 
    console.log("Clique");
    Promise.resolve().then(() => 
    {
      console.log("Microtask do clique");
    });
  });

Ao clicar no botão:

 
  console.log("Clique"); // Saída: Clique
  console.log("Microtask do clique");
  // Saída: Microtask do clique
Mesmo dentro de eventos, microtasks mantêm prioridade.

Exemplo 5 — Armadilha comum

Misturar muitos then pode gerar comportamentos inesperados.

 
  setTimeout(() => 
  { 
    console.log("Timeout");
    Promise.resolve().then(() => 
    {
      console.log("Microtask dentro do timeout");
    });
  }, 0);
 
  setTimeout(() => 
  { 
    console.log("Timeout"); }); 
    // Saída: Timeout
    // Microtask criada depois
    // Saída: Microtask dentro do timeout

Regra prática para o dia a dia

  • Código síncrono roda primeiro
  • Depois, todas as microtasks
  • Por último, uma macrotask por vez
Criar microtasks infinitas pode travar o fluxo de eventos.

Resumo da aula para nunca mais esquecer

  • Microtasks têm prioridade máxima
  • Promises usam microtasks
  • setTimeout e eventos usam macrotasks
  • O Event Loop sempre esvazia microtasks primeiro
  • A ordem do console pode ser prevista

Na próxima aula, vamos aplicar esse conhecimento para entender profundamente Promises e async/await, sem mistério e sem “decorar”.


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 jogo Final Fantasy X para o Sony Playstation 2 vendeu, apenas no dia do seu lançamento, 1.455.732 cópias, estabelecendo um recorde de vendagem para as primeiras 24 horas de um game. Méritos da SquareSoft, que desenvolveu um excelente produto!


Em 1949 a revista Popular Mechanics fez uma previsão para o futuro, dizendo: "Um dia os computadores pesarão menos do que 1,5 tonelada". E pensar que temos smartphones capazes de realizar milhões de vezes mais operações do que os computadores daquela época.


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


O ábaco é o dispositivo de cálculo mais antigo construído e conhecido pelo homem. Suas formas mais primitivas datam de 400 a.C. e eles foram encontrados na China e na Babilônia. Para saber mais sobre a história dos computadores, clique aqui.


Instalar vários aplicativos com o mesmo propósito, como editores de texto, reprodutores de músicas ou vídeos e até programas antívirus sobrecarregam o seu sistema operacional e ainda ocupam espaço desnecessário em seu HD. Tenha apenas um bom programa para cada função.