JavaScript Erros Intermediário
Tratamento de erros
Em JavaScript, erros podem ser lançados (throw) e capturados (try/catch) para evitar que o programa quebre inesperadamente. O bloco finally executa sempre, independentemente de ter ocorrido erro ou não, sendo útil para liberar recursos.
A classe base Error representa erros genéricos, mas podemos criar subclasses personalizadas para representar situações específicas do domínio da aplicação. Isso melhora a legibilidade e permite tratar cada tipo de erro de forma distinta.
Desde o ES2022, o construtor Error aceita a opção cause, que permite encadear erros e preservar a causa raiz. Isso é valioso para depuração, pois mantém o contexto do erro original.
Pontos-chave
trydelimita o código que pode lançar exceções;catchcaptura o erro;finallysempre executa.throwinterrompe o fluxo e lança um valor (geralmente um objetoError).- Prefira estender
Errorpara criar erros específicos, comoValidationError. - Use
new Error('msg', { cause: erroOriginal })para encadear erros e preservar a causa. - Sempre capture erros que você pode tratar; deixe os inesperados subirem.
// Exemplo completo de tratamento de erros em JavaScript
// Definindo uma subclasse de Error para validação
class ValidationError extends Error {
constructor(message, options) {
super(message, options);
this.name = 'ValidationError';
}
}
// Função que valida a idade e lança erro se inválida
function validarIdade(idade) {
if (typeof idade !== 'number' || idade < 0) {
throw new ValidationError('Idade deve ser um número não negativo', { cause: idade });
}
return idade;
}
// Simulando um fluxo com try/catch/finally
try {
console.log('Iniciando validação...');
const idade = validarIdade(-5); // Isso lançará um erro
console.log('Idade válida:', idade);
} catch (erro) {
// Tratando o erro específico
if (erro instanceof ValidationError) {
console.error('Erro de validação:', erro.message);
console.error('Causa:', erro.cause);
} else {
console.error('Erro inesperado:', erro);
}
} finally {
console.log('Validação finalizada.');
}
// Exemplo de encadeamento de erros
function processarDados(dados) {
try {
return JSON.parse(dados);
} catch (erro) {
throw new Error('Falha ao processar dados', { cause: erro });
}
}
try {
processarDados('{ inválido }');
} catch (erro) {
console.error('Erro:', erro.message);
console.error('Causa raiz:', erro.cause.message);
}