Tratamento de Erros em JavaScript
Este artigo explica o tratamento de erros no JavaScript.
YouTube Video
Tratamento de Erros em JavaScript
O tratamento de erros no JavaScript é uma funcionalidade importante para capturar e lidar adequadamente com erros quando um programa encontra problemas inesperados. Principalmente, é comum usar a sintaxe try...catch
para capturar e lidar com erros. Além disso, ao lidar com Promises ou operações assíncronas, o tratamento de erros também pode ser feito usando async/await
ou Promise.prototype.catch
.
Sintaxe de try...catch
try...catch
é usado para capturar e lidar com erros quando eles ocorrem dentro de um bloco de código.
1try {
2 // Code that may throw an error
3 let result = riskyFunction();
4 console.log(result);
5} catch (error) {
6 // Catch and handle the error
7 console.error("An error occurred:", error.message);
8} finally {
9 // Code that will always execute
10 console.log("Error handling has completed.");
11}
- Se um erro ocorrer dentro de um bloco
try
, a execução do programa é interrompida e o blococatch
é executado. - O bloco
finally
é sempre executado, independentemente de haver ou não um erro. É útil para liberar recursos e realizar processamentos finais, entre outras coisas.
Lançando Erros (throw
)
No JavaScript, você pode disparar um erro explicitamente usando a palavra-chave throw
. É usado para lançar mensagens de erro personalizadas ou erros personalizados.
1function checkAge(age) {
2 if (age < 18) {
3 throw new Error("You are under 18 years old.");
4 }
5 return "Age verification completed.";
6}
7
8try {
9 let result = checkAge(15);
10 console.log(result);
11} catch (error) {
12 console.error(error.message); // Displays "You are under 18 years old."
13}
Tratamento de Erros em Operações Assíncronas (Promise
e async/await
)
Ao realizar operações assíncronas, o tratamento de erros é um pouco diferente. Ao usar Promises, os erros são capturados com o método catch
.
1let promise = new Promise((resolve, reject) => {
2 // Asynchronous operation
3 setTimeout(() => reject(new Error("An issue has occurred!")), 1000);
4});
5
6promise
7 .then(result => console.log(result))
8 .catch(error => console.error(error.message)); // Displays "An issue has occurred!"
Ao realizar operações assíncronas com async/await
, você pode tratar os erros com try...catch
.
1async function fetchData() {
2 try {
3 let response = await fetch('https://api.example.com/data');
4 let data = await response.json();
5 console.log(data);
6 } catch (error) {
7 console.error("An error occurred while fetching data:", error.message);
8 }
9}
10
11fetchData();
Resumo
- Você pode capturar erros síncronos usando a sintaxe
try...catch
. - Você pode lançar seus próprios erros usando
throw
. - Os erros em operações assíncronas podem ser tratados usando o método
catch
dePromise
, ou comasync/await
etry...catch
.
Utilizando esses métodos, você pode garantir que seu programa funcione corretamente mesmo quando ocorrem erros.
Error
A classe Error
é usada para o tratamento de erros. Ela fornece a capacidade de criar erros e fornecer mensagens de erro e rastreamentos de pilha.
1try {
2 throw new Error("Something went wrong");
3} catch (e) {
4 console.log(e.message); // Something went wrong
5}
Uso Básico
Um objeto Error
pode ser criado explicitamente quando ocorre um erro. Você cria uma instância com new Error()
e passa uma mensagem de erro.
1const error = new Error("Something went wrong");
2console.log(error.message); // "Something went wrong"
3console.log(error.name); // "Error"
4console.log(error.stack); // Stack trace (information about where the error occurred)
Lançando Erros com throw
No JavaScript, você pode lançar um erro usando a palavra-chave throw
. Isso é usado para interromper o processamento em situações específicas e passar o controle para um manipulador de erros.
1function doSomething() {
2 throw new Error("This function is not yet implemented");
3}
4
5try {
6 doSomething();
7} catch (e) {
8 console.error(e.message); // "This function is not yet implemented"
9}
Erros lançados com throw
podem ser capturados usando a sintaxe try...catch
.
Criando Erros Personalizados
No JavaScript, você pode criar seus próprios erros personalizados estendendo a classe Error
. Isso permite criar erros adaptados a situações específicas.
1class CustomError extends Error {
2 constructor(message) {
3 super(message); // Call the parent class constructor
4 this.name = "CustomError"; // Set the error name
5 }
6}
7
8try {
9 throw new CustomError("A custom error has occurred");
10} catch (e) {
11 console.error(e.name); // "CustomError"
12 console.error(e.message); // "A custom error has occurred"
13}
Classes de Erro Internas
O JavaScript possui várias classes de erro internas que estendem a classe Error
. Elas são usadas para representar erros específicos.
ReferenceError
: Ocorre quando você referencia uma variável que não existe.TypeError
: Ocorre quando o tipo de um valor é diferente do tipo esperado.RangeError
: Ocorre quando um número está fora do intervalo permitido.SyntaxError
: Ocorre quando um código que não é sintaticamente correto é executado.EvalError
: Erros relacionados ao uso da funçãoeval()
. Hoje em dia é raramente usado.URIError
: Ocorre quando um URI inválido (erros de codificação ou decodificação) é usado.
Exemplo: ReferenceError
Aqui está um exemplo de um ReferenceError
.
1try {
2 console.log(undefinedVariable); // Undefined variable
3} catch (e) {
4 console.error(e.name); // "ReferenceError"
5 console.error(e.message); // "undefinedVariable is not defined"
6}
Exemplo: TypeError
Aqui está um exemplo de um TypeError
.
1try {
2 null.f(); // Attempting to call a function on null
3} catch (e) {
4 console.error(e.name); // "TypeError"
5 console.error(e.message); // "Cannot read properties of null (reading 'f')"
6}
Bloco finally
Na sintaxe try...catch
, use o bloco finally
para operações que você deseja executar independentemente de um erro ocorrer.
1try {
2 throw new Error("An issue has occurred");
3} catch (e) {
4 console.error(e.message); // "An issue has occurred"
5} finally {
6 console.log("Performing cleanup");
7}
Neste exemplo, as operações no bloco finally
são executadas mesmo que um erro seja lançado.
Propriedades do objeto Error
O objeto Error
possui as seguintes propriedades.
message
: Esta é a mensagem de erro.name
: O nome do erro, que por padrão é"Error"
.stack
: Um rastreamento de pilha indicando onde o erro ocorreu, útil para depuração.
Benefícios do tratamento de exceções
Ao implementar o tratamento de erros corretamente, você pode evitar que a aplicação trave quando ocorre um comportamento inesperado. Ao usar adequadamente a sintaxe try...catch
e objetos de erro, você pode escrever um código mais robusto.
1function divide(a, b) {
2 if (b === 0) {
3 throw new Error("Cannot divide by zero");
4 }
5 return a / b;
6}
7
8try {
9 console.log(divide(4, 0)); // An error will occur
10} catch (e) {
11 console.error(e.message); // "Cannot divide by zero"
12}
Resumo
- A classe
Error
é usada para representar uma causa de erro e realizar o tratamento de erros. - Use a sintaxe
try...catch...finally
para tratar erros e evitar a terminação inesperada da aplicação. - Também é possível estender a classe
Error
para criar erros personalizados. - Você pode tratar vários tipos de erros utilizando classes de erro incorporadas como
TypeError
eReferenceError
.
Você pode acompanhar o artigo acima usando o Visual Studio Code em nosso canal do YouTube. Por favor, confira também o canal do YouTube.