Volver a la lista

try-catch: los conceptos básicos para el manejo de errores.

Se explica el funcionamiento de `try-catch`, cómo generar errores con `throw`, la función de `finally` y el manejo de errores en entornos asíncronos.

Principiante
|
5min
|
Verificado (2026-07)
Progreso0/55 (0%)

try-catch: conceptos básicos para el manejo de errores

Al finalizar este tema

Comprenderá el principio de funcionamiento de try-catch y podrá determinar dónde debe capturar los errores.


Si se produce un error, el programa se detiene.

javascript
const data = JSON.parse("not json");
console.log("Esta línea no se ejecuta");

Si JSON.parse genera un error, el código posterior no se ejecutará. En el navegador, la ejecución del script se detiene.


Captura de errores con try-catch

javascript
try {
  const data = JSON.parse("not json");
} catch (error) {
  console.log("Fallo al analizar:", error.message);
}
console.log("Esta línea se ejecuta");

try Si se produce un error dentro del bloque, la ejecución salta inmediatamente al bloque catch. El programa continúa. El código posterior al bloque catch también se ejecuta normalmente.

error El objeto tiene las propiedades .message (mensaje de error) y .stack (pila de llamadas).


Lanzar errores directamente con throw

Además de los errores que JavaScript lanza automáticamente, también se pueden lanzar errores manualmente:

javascript
function divide(a, b) {
  if (b === 0) {
    throw new Error("No se puede dividir por cero");
  }
  return a / b;
}

try {
  divide(10, 0);
} catch (error) {
  console.log(error.message); // "No se puede dividir por cero"
}

throw interrumpe inmediatamente la ejecución de la función y propaga el error a la cláusula catch más cercana. Se omiten todas las funciones intermedias.


finally — Ejecución incondicional

javascript
try {
  const file = openFile("data.txt");
  processFile(file);
} catch (error) {
  console.log("Fallo al procesar");
} finally {
  closeFile(file);
}

finally se ejecuta en todo caso, independientemente de si se produce un error o no. Se utiliza para tareas de "limpieza", como cerrar archivos, desconectar conexiones de red y restablecer el estado de carga.

javascript
setLoading(true);
try {
  const data = await fetchData();
  setData(data);
} catch (error) {
  setError(error.message);
} finally {
  setLoading(false);
}

async/await y try-catch

En las funciones asíncronas, el bloque try-catch funciona de la misma manera:

javascript
async function loadUser(id) {
  try {
    const res = await fetch(`/api/users/${id}`);
    if (!res.ok) throw new Error(`HTTP ${res.status}`);
    return await res.json();
  } catch (error) {
    console.log("Fallo al cargar usuario:", error.message);
    return null;
  }
}

await antes de try permite capturar tanto errores de red como errores HTTP.


¿Dónde gestionarlos?

Si se utiliza try-catch en todas partes, el código se vuelve ilegible. Existe un principio:

Gestiona los errores donde puedas solucionarlos. Captura los errores en los lugares donde puedas mostrar un mensaje de error o reintentar la llamada a la API. Si solo vas a registrar un log, no es necesario capturarlos.

javascript
// Mal ejemplo: atrapar sin hacer nada
try {
  doSomething();
} catch (e) {
  // Ignorar
}

// Buen ejemplo: dar retroalimentación al usuario
try {
  await saveData(formData);
  showSuccess("Guardado");
} catch (error) {
  showError("Error al guardar: " + error.message);
}

Puntos clave

try-catch evita que los errores detengan el programa. Genera un error intencionalmente con throw, y el bloque catch más cercano lo capturará (catch). Captura los errores solo en los lugares donde puedas recuperarlos.

💬 Preguntas y comentarios

0 comentarios

Puedes publicar sin iniciar sesión. Los comentarios de invitados no pueden editarse ni eliminarse después.

0/2000

Cargando...