JavaScript:
Tratamento de erros
Como fazer:
Aqui está o clássico bloco try-catch
:
try {
// Código que pode lançar um erro
let result = potentiallyRiskyOperation();
console.log('Sucesso:', result);
} catch (error) {
// O que fazer se um erro for lançado
console.error('Ops:', error.message);
}
Saída de exemplo quando nenhum erro ocorre:
Sucesso: 42
E quando há um erro:
Ops: Algo deu errado
Para código assíncrono, onde promessas estão envolvidas, use try-catch
em uma função async
:
async function fetchData() {
try {
let data = await fetch('https://api.example.com/data');
console.log('Dados obtidos:', data);
} catch (error) {
console.error('Erro ao obter dados:', error.message);
}
}
fetchData();
Aprofundando
O tratamento de erros em JavaScript evoluiu. Lá atrás (ES3, cerca de 1999), tínhamos apenas o bloco try-catch
. Não era super flexível, mas fazia o trabalho.
ES6 (2015) introduziu Promessas e nos deu .then()
e .catch()
, permitindo-nos tratar erros assíncronos de forma mais elegante.
fetch('https://api.example.com/data')
.then(data => console.log('Dados obtidos:', data))
.catch(error => console.error('Erro ao obter dados:', error.message));
Quanto aos detalhes de implementação, quando um erro é lançado, os motores JavaScript criam um objeto Error
com propriedades úteis como message
e stack
. Você também pode criar tipos de erros personalizados estendendo a classe Error
– útil para aplicativos mais complexos.
Alternativas? Você poderia ignorar o tratamento de erros (má ideia), usar callbacks com parâmetros que priorizam erros (olá, estilo Node.js), ou ser mais sofisticado com bibliotecas e frameworks que oferecem suas próprias soluções.
Veja Também
Para mais informações sobre tratamento de erros:
- MDN sobre try-catch: MDN try…catch
- Async/Await: MDN função async
- Um guia para Promessas: MDN Promessas
- Criando e lançando erros personalizados: MDN Error