Direct naar de hoofdinhoud
Module 5 · Les 4 van 420/32 in de cursus~12 min
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

JS
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

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.

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:

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

Wanneer moet je het gebruiken (en wanneer niet)

  • Ja: I/O-bewerkingen (JSON.parse op 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 if dan gooien en vangen.
JS
// 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

Oefening#js.m5.l4.e1
Pogingen: 0Laden…

Definieer `safeDivide(a, b)`: als b 0 is, werp dan een Error met de boodschap 'Divisione per zero', retourneer anders a/b.

Editor laden…
Toon hint

if (b === 0) gooi nieuwe Error('...'); retourneer dan a / b.

Oplossing beschikbaar na 3 pogingen

Oefening beoordelen

Oefening#js.m5.l4.e2
Pogingen: 0Laden…

Definieer `parseJsonSafe(text)`: als tekst geldig is JSON return { ok: true, value: <object> }, anders { ok: false }. Gebruik try/catch op JSON.parse.

Editor laden…
Toon hint

Wikkel JSON.parse in try; in de catch return { ok: false }.

Oplossing beschikbaar na 3 pogingen