Lecții din modul (4/4)
încerca / prinde / aruncă
O eroare în JavaScript este o valoare (de obicei un obiect Error) care întrerupe fluxul normal
și face baloane în stiva de apeluri până când cineva îl prinde. Construcția pentru a gestiona acest caz este
try / catch.
Se afișează o eroare: throw
function dividi(a, b) {
if (b === 0) {
throw new Error('Divisione per zero');
}
return a / b;
}throw întrerupe imediat funcția curentă.
Prinde: 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.Tot ce este în interiorul try este executat; dacă se produce o eroare (prin throw sau prin orice operațiune care
eșuează), controlul sare la blocul catch. Variabila după catch (...) primește eroarea.
finally (opțional)
Cod care rulează întotdeauna, eroare sau nu. Util pentru închiderea resurselor:
try {
// ... operazione rischiosa
} catch (err) {
// ... log
} finally {
// ... pulizia (sempre eseguita)
}Când să-l folosești (și când nu)
- Da: operațiuni I/O (
JSON.parsepe intrare neîncrezătoare,fetch, acces la disc), conversii care poate eșua. - Poate nu: pentru debitul normal. Dacă știți că o intrare poate fi invalidă, este mai bine să o verificați
cu un
ifdecât să arunce și să prindă.
// Tipico: parsing JSON difensivo
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: '...' }Încearcă
Definiți „safeDivide(a, b)”: dacă b este 0, trimiteți o eroare cu mesajul „Divisione per zero”, în caz contrar returnați a/b.
Afișează indiciu
if (b === 0) throw new Error('...'); apoi returnați a/b.
Soluție disponibilă după 3 încercări
Exercițiu de revizuire
Definiți `parseJsonSafe(text)`: dacă textul este valid JSON return { ok: true, value: <object> }, altfel { ok: false }. Utilizați try/catch pe JSON.parse.
Afișează indiciu
Wrap JSON.parse în try; în catch return { ok: false }.
Soluție disponibilă după 3 încercări