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.
- Crie o arquivo
pilula_promise.jsna pastasrc/:
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
- Abra o terminal integrado.
- 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)