Saltar al contenido principal
eLearner.app
Módulo 5 · Lección 4 de 420/32 en el curso~12 min
Lecciones del módulo (4/4)

try / catch / throw

Un error en JavaScript es un valor (normalmente un objeto Error) que interrumpe el flujo normal y sube por la pila de llamadas hasta que alguien lo captura. La estructura para gestionar esta eventualidad es try / catch.

Lanzar un error: throw

JS
function dividi(a, b) {
  if (b === 0) {
    throw new Error('Divisione per zero');
  }
  return a / b;
}

throw detiene inmediatamente la función actual.

Capturar: try / catch

JS
try {
  const r = dividi(10, 0);
  console.log('ok', r);
} catch (err) {
  console.log('errore:', err.message); // 'errore: Divisione per zero'
}

// Il programma continua qui, anche se c'è stato un errore.

Todo lo que está dentro de try se ejecuta; si se lanza un error (con throw o por cualquier operación que falle), el control salta al bloque catch. La variable después de catch (...) recibe el error.

finally (opcional)

Código que se ejecuta siempre, haya error o no. Útil para liberar recursos:

JS
try {
  // ... operazione rischiosa
} catch (err) {
  // ... log
} finally {
  // ... pulizia (sempre eseguita)
}

Cuándo usarlo (y cuándo no)

  • : operaciones de E/S (JSON.parse con datos de entrada no confiables, fetch, acceso a disco), conversiones que pueden fallar.
  • Tal vez no: para el flujo de control normal. Si sabes que una entrada puede ser inválida, es mejor verificarla con un if que lanzar y capturar un error.
JS
// Tipico: parsing JSON di difesa
function parseJsonSafe(text) {
  try {
    return { ok: true, value: JSON.parse(text) };
  } catch (err) {
    return { ok: false, error: err.message };
  }
}

parseJsonSafe('{"a":1}'); // { ok: true, value: {a:1} }
parseJsonSafe('non json'); // { ok: false, error: '...' }

Pruébalo tú mismo

Ejercicio#js.m5.l4.e1
Intentos: 0Cargando...

Define `safeDivide(a, b)`: si b es 0 lanza un Error con el mensaje 'Divisione per zero', de lo contrario devuelve a/b.

Cargando editor...
Mostrar pista

if (b === 0) throw new Error('...'); y luego return a / b.

Solución disponible después de 3 intentos

Ejercicio de repaso

Ejercicio#js.m5.l4.e2
Intentos: 0Cargando...

Define `parseJsonSafe(text)`: si text es un JSON válido devuelve { ok: true, value: <objeto> }, de lo contrario { ok: false }. Usa try/catch en JSON.parse.

Cargando editor...
Mostrar pista

Envuelve JSON.parse en un try; en el catch devuelve { ok: false }.

Solución disponible después de 3 intentos