Capítulo 11: Assincronismo (Callbacks e Promises) ⏳🕶️

Neste capítulo, vamos entrar em um dos conceitos mais importantes do JavaScript: o Assincronismo. Vamos usar o tema Matrix para entender como o Node.js lida com operações que demoram tempo!


📖 O que é Assincronismo?

Diferente do C ou Java tradicional, onde o programa para e espera uma linha terminar para ir para a próxima (Síncrono), o JavaScript pode iniciar uma tarefa demorada (como baixar um arquivo) e continuar rodando outras coisas enquanto espera (Assíncrono).

As duas formas clássicas de lidar com isso são Callbacks e Promises.


📖 Exemplo Guiado: O Teste da Pílula (Promise)

Vamos simular a escolha da pílula. O processo de “revelar a verdade” demora 2 segundos.

  1. Crie o arquivo pilula_promise.js na pasta src/:
const escolherPilula = (cor) => {
    return new Promise((resolve, reject) => {
        console.log(`Voce escolheu a pilula ${cor}. Processando...`);
        
        // Simula uma demora de 2 segundos (2000 ms)
        setTimeout(() => {
            if (cor === "vermelha") {
                resolve("Bem-vindo ao mundo real. Voce acordou da Matrix.");
            } else {
                reject("Voce continuara dormindo e acreditando no que quiser.");
            }
        }, 2000);
    });
};
 
// Usando a Promise
escolherPilula("vermelha")
    .then((mensagem) => {
        console.log(`Sucesso: ${mensagem}`);
    })
    .catch((erro) => {
        console.log(`Aviso: ${erro}`);
    });
 
console.log("Esta linha executa ANTES do resultado da pílula, porque o código é assíncrono!");

🕹️ Como Executar e Testar no VS Code

  1. Abra o terminal integrado.
  2. Execute: node pilula_promise.js

Resultado Esperado:

Voce escolheu a pilula vermelha. Processando...
Esta linha executa ANTES do resultado da pílula, porque o código é assíncrono!
(espera 2 segundos...)
Sucesso: Bem-vindo ao mundo real. Voce acordou da Matrix.

📊 Ilustração Visual: Linha do Tempo Assíncrona

Veja como a execução não para:

sequenceDiagram
    participant P as Programa
    participant N as Node.js (Background)
    P->>N: Inicia tarefa demorada (setTimeout)
    Note over P: Continua executando outras linhas
    N-->>P: Tarefa concluída (Chama resolve/then)

🛠️ Prática Obrigatória 1: Operação de Hacker

Crie uma função chamada baixarDados que retorne uma Promise. Ela deve demorar 3 segundos para “baixar” os dados e resolver com a mensagem “Dados secretos baixados!“. Use o .then() para exibir a mensagem.


🔑 Gabarito de Código

Prática 1: hacker_promise.js

const baixarDados = () => {
    return new Promise((resolve) => {
        console.log("Iniciando download dos dados da Matrix...");
        setTimeout(() => {
            resolve("Dados secretos baixados!");
        }, 3000);
    });
};
 
baixarDados().then((msg) => {
    console.log(msg);
});

📤 Instruções de Entrega (GitHub Desktop + Microsoft Teams)

(Siga o padrão estabelecido no Guia)


Capitulo Anterior | Proximo Capitulo