Excepciones: try-catch-finally

El bloque try...catch es la herramienta fundamental para el manejo de excepciones en programación. Su objetivo principal es evitar que una aplicación se caiga (se "rompa") por completo cuando algo sale mal.

¿Cómo funciona try-catch?

Ejemplo de código

Buenas prácticas

Usos del try ... catch

try...catch se utiliza para capturar errores en estos casos:

1. Leer, transformar o manipular texto que deba convertirse a JSON (JSON.parse).

2. Interactuar con APIs del navegador

(localStorage, sensores, portapapeles...) donde el entorno del usuario pueda bloquearte.

3. Hacer peticiones HTTP con la API fetch o Axios.

Para hacer peticiones HTTP se utiliza una librería llamada Axios para hacer peticiones, justamente porque maneja los errores de una forma mucho más intuitiva que fetch.

En Axios, cualquier fallo (tanto si el servidor está caído como si se devuelve un error 404 o 500) va a parar directamente al catch. Además, Axios proporciona un objeto de error especializado llamado AxiosError.

4. Validar reglas estrictas desde funciones de una librería usando throw new Error.

Es mala práctica: Usar throw y catch para validar cosas normales que se arreglan con un if (ej. campos vacíos, contraseñas cortas).

Es buena práctica: Usar throw en funciones importantes para blindarlas contra bugs de otros programadores (o en el futuro), asegurando que el programa falle inmediatamente si se violan las reglas críticas del negocio.

Usar la lista de excepciones incorporadas en JavaScript en nuestras funciones

En JavaScript, todos los errores heredan de un objeto base llamado Error. El motor del navegador o de Node.js incluye los siguientes errores nativos principales:

Estructura try-catch completa:

El objeto error:

En JavaScript, la variable dentro de catch(error) suele tener dos propiedades muy útiles por defecto: error.name (el nombre del tipo de error, ej: "TypeError") y error.message (la descripción del problema en texto humano).

Dentro del catch utilizamos el operador instanceof para preguntar: "¿Este error es una instancia de TypeError?".