Até aqui, entendemos profundamente Promises e async/await.
Agora é hora de aplicar isso em um dos usos mais comuns do JavaScript moderno:
consumir dados de uma API usando fetch.
Aqui vamos trabalhar com exemplos reais, erros reais e decisões reais.
🎯 Objetivo da aula
Ao final desta aula, você será capaz de:
- Usar
fetchcomasync/await - Entender o que o
fetchrealmente retorna - Tratar erros de rede corretamente
- Evitar armadilhas comuns
- Ler código assíncrono com confiança
O que é o fetch?
fetch é uma função nativa do JavaScript usada para:
- Fazer requisições HTTP
- Buscar dados de APIs
- Enviar e receber informações
Importante:
fetch NÃO rejeita a Promise em erro HTTP (404, 500). Exemplo: ao se deparar com isso:
fetch("/usuarios/999")
.then(...)
.catch(...)
A intuição é achar que se der erro 404 ou 500, o .catch() será chamado, mas isso NÃO é verdade com o fetch!
O fetch só rejeita a Promise quando ocorre um erro de rede, por exemplo:
- Sem internet
- DNS não resolve
- Servidor fora do ar
- Requisição bloqueada (CORS, etc.)
O que é um erro HTTP para o fetch?
Para o fetch, um erro HTTP como:
- 404 (Not Found)
- 401 (Unauthorized)
- 500 (Internal Server Error)
Ou seja:
- O servidor respondeu
- O protocolo HTTP funcionou
- A requisição chegou e voltou
- Então, para o fetch:
Primeiro exemplo — fetch simples
Vamos buscar dados de uma API pública:
async function buscarUsuario()
{
const resposta = await fetch("https://jsonplaceholder.typicode.com/users/1"); const dados = await resposta.json();
console.log(dados);
}
buscarUsuario();
await espera a resposta HTTP. O segundo await espera a conversão para JSON. Entendendo o que acontece aqui
fetch()retorna uma Promiseawaitpausa a função- O Call Stack é liberado
- A execução continua quando a resposta chega
Tratando erros corretamente
Agora vamos tratar erros do jeito certo.
async function buscarUsuario()
{
try
{
const resposta = await fetch("https://jsonplaceholder.typicode.com/users/999");
if (!resposta.ok)
{
throw new Error("Erro HTTP: " + resposta.status);
}
const dados = await resposta.json();
console.log(dados);
}
catch (erro)
{
console.log("Erro ao buscar usuário:", erro.message);
}
}
buscarUsuario();
console.log("Erro ao buscar usuário: Erro HTTP: 404"); // Saída esperada se o usuário não existir Por que precisamos testar resposta.ok?
Porque:
fetchsó rejeita em erro de rede- 404 e 500 ainda são respostas válidas
- O erro precisa ser tratado manualmente
Exemplo realista — função reutilizável
Um padrão muito comum:
async function fetchJSON(url)
{
const resposta = await fetch(url);
if (!resposta.ok)
{
throw new Error("Erro HTTP: " + resposta.status);
}
return resposta.json();
}
Usando a função:
async function executar()
{
try
{
const usuario = await fetchJSON( "https://jsonplaceholder.typicode.com/users/1" );
console.log(usuario.name); // Saída será o nome do usuário
}
catch (erro)
{
console.log("Erro:", erro.message);
}
}
executar();
Vantagem real do async/await aqui
- Fluxo linear
- Leitura natural
- Tratamento de erro centralizado
- Código mais fácil de manter
Erro comum para evitar
const dados = await fetch(url).json(); // ❌ errado O correto é:
const resposta = await fetch(url); const dados = await resposta.json(); // ✅ Resumo da aula para nunca mais esquecer
fetchretorna uma Promiseawaitpausa apenas a função- Erros HTTP não rejeitam automaticamente
resposta.okdeve ser verificado- async/await deixa o código mais legível
Na próxima aula, vamos integrar async/await com tudo o que vimos sobre Event Loop, microtasks e fluxo de execução — fechando esse capítulo com chave de ouro.
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?
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.
Nintendo Wii
Nos primeiros oito dias após o lançamento do console Nintendo Wii foram vendidas 600 mil unidades. Isso equivale a quase um por segundo e estes incríveis números são referentes às vendas apenas nos EUA!
Nintendo Entertainment System
O console Nintendo Entertainment System (NES), da Nintendo, detém o recorde de videogame mais clonado em todo o mundo. Já foram catalogados mais de 300 aparelhos diferentes capazes de reproduzir seus jogos! Saiba mais sobre ele aqui.
Civilization
A empresa Take-Two pagou à Infogrames mais de 22 milhões de dólares pelos direitos de Civilization, em novembro de 1994. Ainda sobre este título, Sid Meier, um dos seus fundadores, é o profissional da área dos games mais premiado em todo o mundo.
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.










