Manejo de Errores
Los errores son inevitables en cualquier programa real: el servidor puede estar caído, el usuario puede ingresar datos inválidos, el archivo puede no existir. Un buen manejo de errores no elimina los problemas pero los contiene, evita que la app crashee y comunica al usuario qué ocurrió de forma amigable.
try/catch es el bloque fundamental: el código que puede fallar va en try, y si lanza un error, catch lo captura con información del problema (mensaje, tipo, stack trace). El bloque finally se ejecuta siempre, haya error o no, ideal para cerrar conexiones o limpiar recursos.
Puedes crear errores personalizados con throw new Error("mensaje") o extendiendo la clase Error para diferentes tipos de error en tu aplicación. En código asíncrono con async/await, siempre usa try/catch. En promesas encadenadas, siempre agrega .catch(). Un error sin manejar en producción puede hacer que tu app sea inutilizable.
// try/catch/finally
function dividir(a, b) {
if (b === 0) throw new Error("División por cero");
return a / b;
}
try {
const resultado = dividir(10, 0);
console.log(resultado);
} catch (error) {
console.error("Error capturado:", error.message);
} finally {
console.log("Esto siempre ejecuta");
}
// Errores personalizados
class ErrorValidacion extends Error {
constructor(campo, mensaje) {
super(mensaje);
this.name = "ErrorValidacion";
this.campo = campo;
}
}
function validarEmail(email) {
if (!email.includes("@")) {
throw new ErrorValidacion("email", "Email inválido");
}
return true;
}
try {
validarEmail("sin-arroba");
} catch (error) {
if (error instanceof ErrorValidacion) {
console.log(`Campo: ${error.campo} - ${error.message}`);
} else {
throw error; // Re-lanza errores desconocidos
}
}
Practica esta lección
Resuelve los ejercicios del curso de JavaScript en la app, gratis y con corrección automática.
Empezar a practicar