Seu carrinho está vazio no momento!

Introdução (3 min)
Imagine um restaurante com um único cozinheiro. Sem async/await, cada pedido força o cozinheiro a parar tudo para prepará-lo, do início ao fim. Com async/await, o cozinheiro pode iniciar o preparo de um prato, enquanto o forno assa outro e a salada descansa, atendendo vários clientes “simultaneamente”.
Essa estratégia é vital para APIs modernas, permitindo que elas lidem com múltiplas requisições sem travar. Nesta aula, construiremos uma API simples com Node.js e Express que busca dados de duas fontes diferentes, simulando uma situação real de agregação de dados.
No contexto do Node.js/Express, async/await simplifica o manejo de operações assíncronas, tornando o código mais legível e manutenível.
Conceito Fundamental (7 min)
async/await é uma sintaxe moderna para lidar com Promises, que representam o resultado de uma operação assíncrona. async define uma função como assíncrona, habilitando o uso de await. await pausa a execução da função até que a Promise seja resolvida (sucesso) ou rejeitada (erro).
Termos relevantes: Promise, resolve, reject, then, catch, assíncrono, síncrono.
Em produção, async/await é usado em cenários como requisições a APIs externas, acesso a bancos de dados, leitura/escrita de arquivos, entre outros. Integra-se facilmente com bibliotecas como Axios para requisições HTTP.
Vantagens: Código mais limpo, legível e fácil de debugar. Desvantagens: Requer um entendimento básico de Promises.
Implementação Prática (10 min)
const express = require('express');
const axios = require('axios');
const app = express();
const port = 3000;
// Simulando duas APIs externas
const api1 = 'https://jsonplaceholder.typicode.com/todos/1';
const api2 = 'https://jsonplaceholder.typicode.com/users/1';
async function buscarDados() {
try {
// Executa as requisições em paralelo
const [resposta1, resposta2] = await Promise.all([
axios.get(api1),
axios.get(api2),
]);
// Processa os dados recebidos
const dadosCombinados = {
todo: resposta1.data,
usuario: resposta2.data,
};
return dadosCombinados;
} catch (erro) {
console.error("Erro ao buscar dados:", erro);
// Lida com o erro de forma robusta, retornando um valor padrão ou lançando uma exceção
return { erro: 'Falha ao buscar dados' };
}
}
app.get('/dados', async (req, res) => {
try {
const dados = await buscarDados();
res.json(dados);
} catch (erro) {
console.error("Erro no endpoint /dados:", erro);
res.status(500).json({ erro: 'Erro interno do servidor' });
}
});
app.listen(port, () => {
console.log(Servidor rodando em http://localhost:${port});
});
npm install express axios
node seu_arquivo.js
Este código demonstra como buscar dados de duas APIs simultaneamente usando Promise.all. A função buscarDados encapsula a lógica assíncrona e o tratamento de erros. O bloco try...catch garante que erros sejam capturados e tratados adequadamente, evitando que a aplicação trave.
Exercício Hands-On (5 min)
Modifique o código para buscar dados de uma terceira API (https://jsonplaceholder.typicode.com/posts/1). Combine os dados das três APIs em um único objeto JSON e retorne-o no endpoint /dados.
Solução:
Adicione uma terceira requisição dentro do Promise.all e ajuste o processamento dos dados.
Teste:
Acesse http://localhost:3000/dados no seu navegador ou use uma ferramenta como Postman para verificar o resultado.
Troubleshooting:
Verifique se as URLs das APIs estão corretas e se o servidor está rodando. Inspecione o console para identificar erros.
Próximos Passos:
Explore outras funcionalidades de async/await, como o uso de for await...of para iterar sobre Promises de forma assíncrona. Pesquise sobre o conceito de backpressure e como gerenciar um grande número de requisições concorrentes.
🚀 Pronto para a próxima aula?
Continue sua jornada no desenvolvimento de APIs e domine Node.js & Express!