Manejo de Errores en JavaScript
Este artículo explica el manejo de errores en JavaScript.
YouTube Video
Manejo de Errores en JavaScript
El manejo de errores en JavaScript es una característica importante para capturar y manejar adecuadamente los errores cuando un programa se encuentra con problemas inesperados. Principalmente, es común utilizar la sintaxis try...catch
para capturar y manejar errores. Además, al trabajar con Promesas u operaciones asíncronas, el manejo de errores también se puede realizar utilizando async/await
o Promise.prototype.catch
.
Sintaxis try...catch
try...catch
se utiliza para capturar y manejar errores cuando ocurren dentro de un bloque 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}
- Si ocurre un error dentro de un bloque
try
, la ejecución del programa se interrumpe y se ejecuta el bloquecatch
. - El bloque
finally
siempre se ejecuta, independientemente de si hay un error o no. Es útil para liberar recursos y realizar un procesamiento final, entre otras cosas.
Lanzando Errores (throw
)
En JavaScript, puedes provocar un error explícitamente utilizando la palabra clave throw
. Se utiliza para lanzar mensajes de error personalizados o errores 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}
Manejo de Errores en Operaciones Asincrónicas (Promise
y async/await
)
Al realizar operaciones asíncronas, el manejo de errores es ligeramente diferente. Al utilizar Promesas, los errores se capturan con el 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!"
Cuando realizas operaciones asíncronas utilizando async/await
, puedes manejar los errores con 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();
Resumen
- Puedes capturar errores sincrónicos utilizando la sintaxis
try...catch
. - Puedes lanzar tus propios errores utilizando
throw
. - Los errores en operaciones asíncronas se pueden manejar utilizando el método
catch
dePromise
, o conasync/await
ytry...catch
.
Al utilizar estos métodos, puedes asegurarte de que tu programa funcione correctamente incluso cuando ocurren errores.
Error
La clase Error
se utiliza para el manejo de errores. Proporciona la capacidad de crear errores y suministrar mensajes de error y trazas de pila.
1try {
2 throw new Error("Something went wrong");
3} catch (e) {
4 console.log(e.message); // Something went wrong
5}
Uso básico
Un objeto Error
se puede crear explícitamente cuando ocurre un error. Creas una instancia con new Error()
y pasas un mensaje de error.
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)
Lanzando Errores con throw
En JavaScript, puedes lanzar un error utilizando la palabra clave throw
. Esto se utiliza para interrumpir el procesamiento en situaciones específicas y pasar el control a un manejador de errores.
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}
Los errores lanzados con throw
se pueden capturar usando la sintaxis try...catch
.
Creación de Errores Personalizados
En JavaScript, puedes crear tus propios errores personalizados extendiendo la clase Error
. Esto te permite crear errores adaptados a situaciones 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}
Clases de Error Integradas
JavaScript tiene varias clases de errores integradas que extienden la clase Error
. Estas se utilizan para representar errores específicos.
ReferenceError
: Ocurre cuando haces referencia a una variable que no existe.TypeError
: Ocurre cuando el tipo de un valor es diferente del tipo esperado.RangeError
: Ocurre cuando un número está fuera del rango permitido.SyntaxError
: Ocurre cuando se ejecuta código que no es sintácticamente correcto.EvalError
: Errores relacionados con el uso de la funcióneval()
. Rara vez se utiliza en la actualidad.URIError
: Ocurre cuando se utiliza un URI inválido (errores de codificación o decodificación).
Ejemplo: ReferenceError
Aquí tienes un ejemplo de un 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}
Ejemplo: TypeError
Aquí tienes un ejemplo de un 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}
Bloque finally
En la sintaxis try...catch
, utiliza el bloque finally
para operaciones que quieras ejecutar independientemente de si ocurre un error.
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}
En este ejemplo, las operaciones en el bloque finally
se ejecutan incluso si se lanza un error.
Propiedades del objeto Error
El objeto Error
tiene las siguientes propiedades.
message
: Este es el mensaje del error.name
: El nombre del error, que por defecto es"Error"
.stack
: Un seguimiento de pila que contiene dónde ocurrió el error, útil para la depuración.
Beneficios del manejo de excepciones
Implementando correctamente el manejo de errores, puedes evitar que la aplicación se cierre cuando ocurra un comportamiento inesperado. Al utilizar adecuadamente la sintaxis try...catch
y los objetos de error, puedes escribir código más 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}
Resumen
- La clase
Error
se utiliza para representar una causa de error y realizar el manejo de errores. - Usa la sintaxis
try...catch...finally
para manejar errores y prevenir la terminación inesperada de la aplicación. - También es posible extender la clase
Error
para crear errores personalizados. - Puede manejar varios tipos de errores utilizando clases de error integradas como
TypeError
yReferenceError
.
Puedes seguir el artículo anterior utilizando Visual Studio Code en nuestro canal de YouTube. Por favor, también revisa nuestro canal de YouTube.