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
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
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:
try {
// ... operazione rischiosa
} catch (err) {
// ... log
} finally {
// ... pulizia (sempre eseguita)
}Cuándo usarlo (y cuándo no)
- Sí: operaciones de E/S (
JSON.parsecon 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
ifque lanzar y capturar un error.
// 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
Define `safeDivide(a, b)`: si b es 0 lanza un Error con el mensaje 'Divisione per zero', de lo contrario devuelve a/b.
Mostrar pista
if (b === 0) throw new Error('...'); y luego return a / b.
Solución disponible después de 3 intentos
Ejercicio de repaso
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.
Mostrar pista
Envuelve JSON.parse en un try; en el catch devuelve { ok: false }.
Solución disponible después de 3 intentos