Como debugar código assíncrono no navegador?
Quando trabalhamos com JavaScript assíncrono, seja com promessas (Promises
), funções async/await
ou requisições HTTP, é fundamental ter ferramentas para debugar e garantir que o fluxo do código esteja funcionando como esperado. O código assíncrono pode ser desafiador para depurar devido ao seu comportamento não linear, onde as funções não são executadas na mesma ordem em que são chamadas.
Ferramentas para debugar código assíncrono
A boa notícia é que os navegadores modernos oferecem poderosas ferramentas de desenvolvedor que permitem depurar código assíncrono de forma eficaz. Vamos explorar algumas dessas ferramentas e técnicas para facilitar o processo de depuração.
1. Usando o console do navegador
O primeiro passo para debugar qualquer tipo de código em JavaScript é utilizar o console do navegador. O console.log()
pode ser uma ferramenta muito útil para inspecionar o fluxo do código e verificar o que está acontecendo com as variáveis e funções assíncronas.
Exemplo de uso do console.log
:
function fetchData() {
console.log('Iniciando requisição...');
fetch('https://jsonplaceholder.typicode.com/posts')
.then(response => response.json())
.then(data => {
console.log('Dados recebidos:', data);
})
.catch(error => {
console.log('Erro na requisição:', error);
});
}
fetchData();
O que o código está fazendo: A função fetchData()
realiza uma requisição usando fetch
. Usamos console.log()
para depurar o fluxo, verificando quando a requisição é iniciada, quando os dados são recebidos ou quando ocorre um erro.
Isso ajuda a entender se a promessa foi resolvida corretamente ou se algum erro ocorreu.
2. Breakpoints e pontos de interrupção no navegador
Outra maneira poderosa de depurar código assíncrono é utilizando breakpoints. Eles permitem que você pause a execução do código em pontos específicos para inspecionar o estado do programa.
Nos navegadores modernos, você pode definir breakpoints em funções assíncronas e ver o que acontece durante a execução. Vamos ver como usar breakpoints para depurar uma função com async/await
.
Exemplo de código com async/await
:
async function fetchData() {
try {
console.log('Iniciando requisição...');
const response = await fetch('https://jsonplaceholder.typicode.com/posts');
const data = await response.json();
console.log('Dados recebidos:', data);
} catch (error) {
console.log('Erro na requisição:', error);
}
}
fetchData();
O que o código está fazendo: No código acima, a requisição é feita de maneira assíncrona utilizando async/await
. Você pode colocar um breakpoint na linha do await fetch(...)
, o que vai pausar a execução do código ali e permitir que você inspecione as variáveis response
e data
antes da execução continuar.
3. Depuração de Promises e async/await
com o depurador do navegador
As ferramentas de desenvolvedor no Chrome e no Firefox têm recursos poderosos para depurar promessas (Promises
) e funções async/await
. Quando você está lidando com promessas, pode usar o depurador para ver os detalhes da promessa antes e depois de ela ser resolvida.
Você pode colocar breakpoints dentro de funções assíncronas, que são chamadas dentro de then()
ou após o await
. Além disso, o navegador exibe automaticamente o estado da promessa no painel de execução.
4. Inspecionando a pilha de chamadas (Call Stack)
Quando você está depurando código assíncrono, pode ser útil inspecionar a pilha de chamadas (Call Stack). Ela mostra a sequência de funções que foram chamadas até o ponto em que o código foi interrompido.
Ao usar breakpoints, a pilha de chamadas é exibida no painel de Call Stack no navegador, permitindo que você entenda o fluxo da execução e identifique onde as promessas foram criadas e resolvidas.
Outras técnicas e boas práticas
- Use
console.table()
para visualizar arrays e objetos: Ao depurar grandes quantidades de dados, como arrays de objetos,console.table()
pode ajudar a visualizar os dados de forma mais organizada. - Verifique o status das requisições: Ao fazer requisições HTTP, sempre verifique os códigos de status retornados, como
200 OK
para sucesso ou404
para erro de página não encontrada. - Não subestime os logs: Mesmo em código assíncrono, logs podem ser extremamente úteis para entender o que está acontecendo. Não hesite em usar
console.log
para imprimir variáveis e resultados intermediários.
Conclusão
Depurar código assíncrono pode ser desafiador, mas as ferramentas modernas de desenvolvimento facilitam o processo. Usando breakpoints, o console do navegador e técnicas de inspeção da pilha de chamadas, você pode identificar rapidamente problemas e entender o fluxo de execução do seu código assíncrono. Lembre-se de testar o fluxo de requisições e de sempre usar boas práticas de depuração para garantir que seu código funcione corretamente.
Melhore sua experiência de depuração com ferramentas de navegador para código assíncrono
A depuração de código assíncrono é um processo essencial quando lidamos com operações que envolvem fetch
, async/await
e promessas. Usar as ferramentas de desenvolvedor do navegador ajuda a encontrar e corrigir rapidamente problemas de desempenho ou erros de execução.
Algumas aplicações:
- Uso de breakpoints para pausar o código e inspecionar a execução de funções assíncronas.
- Monitoramento de promessas e funções
async/await
no painel de depuração do navegador. - Depuração de chamadas de rede (fetch) e status das requisições HTTP usando o painel de rede.
Dicas para quem está começando
- Quando começar a depurar código assíncrono, use bastante
console.log
para entender o comportamento das promessas e funções assíncronas. - Use os recursos de pausa no código e pontos de interrupção para examinar o fluxo das funções assíncronas em detalhes.
- Aprenda a usar o painel de Call Stack no navegador para rastrear a sequência de execução do código e entender a origem dos erros.
- Se as promessas forem complicadas, use async/await para simplificar o código e facilitar a depuração.
Contribuições de Marina Furtado