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,catchefinallyfuncionam - Entender o que o
async/awaitfaz 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);
});
});
}); 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)
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 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
thenecatchusam microtasksasync/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.
Você Sabia?
Ultima Online
Criar um jogo é muito mais complexo do que parece. São milhares, às vezes, milhões de linhas de código. Isso não é exagero! Apenas o jogo Ultima Online possui 6.006.313 linhas de programação, totalizando 25.103.295 palavras
Música tema do Blanka
Até a primeira metade dos anos 90 era bastante comum que as trilhas sonoras dos games fossem criadas por mulheres e a responsável pelas músicas do clássico Street Fighter 2 foi Yoko Shimomura. Segundo ela, o ritmo "Tararirarin" da música tema do personagem Blanka, do Brasil, veio à sua cabeça enquanto ela estava no trem a caminho da Capcom.
Duck Hunt
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".
River Raid
O épico jogo River Raid, do Atari, foi desenhado e boa parte de sua programação foi feita por uma mulher: Carol Shaw, uma excelente programadora e funcionária da Activision em 1982. Saiba mais sobre a história deste incrível jogo, aqui.
Tetris
Desde o seu lançamento, em 1985, o fantástico jogo Tetris vende pelo menos 70 milhões de unidades por ano em todo o mundo! Os dados são oficiais e fornecidos pela THQ, uma das distribuidoras do título.










