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?
Mario em Donkey Kong
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.
Mario e seu bigode
O personagem Mario só possui bigode porque quando ele foi criado, em 1981, a resolução de tela dos equipamentos disponíveis não permitia que fosse desenhada uma boca, então os desenvolvedores fizeram o grande bigode para contornar essa limitação tecnológica.
Galaxy Game
As primeiras máquinas de fliperama do mundo a utilizarem moedas, chamadas de Galaxy Game, custavam mais de 20 mil dólares para serem produzidas. Saiba mais sobre elas aqui.
Cuidados com o notebook
Utilizar seu notebook em camas, sofás ou qualquer superfície macia pode obstruir as entradas e saídas de ar, elevando a temperatura e provocando danos a diversos componentes. Utilize-o sempre sobre uma superfície rígida. Saiba mais aqui.
Final Fantasy X
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!










