Modulelessen (4/4)
proberen/vangen/gooien
Een fout in JavaScript is een waarde (meestal een Error object) die de normale stroom onderbreekt
en laat de call-stack opborrelen totdat iemand hem vangt. De constructie om deze zaak te behandelen is
try / catch.
Er wordt een fout gegenereerd: throw
function dividi(a, b) {
if (b === 0) {
throw new Error('Divisione per zero');
}
return a / b;
}throw onderbreekt onmiddellijk de huidige functie.
Vangen: 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.Alles binnen try wordt uitgevoerd; als er een fout optreedt (via throw of door een bewerking die
mislukt), springt de besturing naar het blok catch. De variabele na catch (...) ontvangt de fout.
finally (optioneel)
Code die altijd wordt uitgevoerd, fout of niet. Handig om bronnen te sluiten:
try {
// ... operazione rischiosa
} catch (err) {
// ... log
} finally {
// ... pulizia (sempre eseguita)
}Wanneer moet je het gebruiken (en wanneer niet)
- Ja: I/O-bewerkingen (
JSON.parseop niet-vertrouwde invoer,fetch, schijftoegang), conversies die kan mislukken. - Misschien niet: voor de normale stroom. Als u weet dat een invoer mogelijk ongeldig is, kunt u deze beter controleren
met een
ifdan gooien en vangen.
// 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: '...' }Probeer het
Definieer `safeDivide(a, b)`: als b 0 is, werp dan een Error met de boodschap 'Divisione per zero', retourneer anders a/b.
Toon hint
if (b === 0) gooi nieuwe Error('...'); retourneer dan a / b.
Oplossing beschikbaar na 3 pogingen
Oefening beoordelen
Definieer `parseJsonSafe(text)`: als tekst geldig is JSON return { ok: true, value: <object> }, anders { ok: false }. Gebruik try/catch op JSON.parse.
Toon hint
Wikkel JSON.parse in try; in de catch return { ok: false }.
Oplossing beschikbaar na 3 pogingen