Leodario.com

Leodario.com – Tudo sobre Tecnologia

Aula 9 – API JavaScript, Node.js e Express – Async/Await Mastery – Sintaxe moderna assíncrona

Imagem destacada da aula de API

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!

📚 Ver todas as aulas