Exception doorgooien in JavaScript
Laten we het catch blok bekijken van de taak met JSON-product:
catch (error) {
if (error.name == 'SyntaxError') {
alert('Ongeldige JSON van product');
} else if (error.name == 'ProductCostError') {
alert('Het product heeft geen prijs of hoeveelheid');
}
}
Zoals je ziet, vangen we twee door ons geplande
uitzonderingen en reageren we hier op een bepaalde manier op.
Maar wat gebeurt er als er een niet door ons voorziene
uitzondering van een ander type optreedt? In dat geval
komt het ook in het catch blok terecht, maar
zal er geen reactie op volgen, omdat
de uitzondering met een ander type eenvoudigweg niet in
een van onze if-statements terechtkomt.
Als ik zeg dat er geen reactie zal zijn, bedoel ik dat er echt geen is: er zal niet eens een foutmelding in de console verschijnen. Onze code zal eenvoudigweg stilzwijgend niet werken.
Daarom is er de volgende regel: je
code moet alleen die uitzonderingen vangen
waar het mee weet om te gaan. Als de uitzondering
onbekend is, moet deze worden doorgegooid
verder met behulp van throw. In dat geval
zal het hoger worden opgevangen door iemand die beter geïnformeerd is
of de uitzondering zal als fout in de console verschijnen.
Laten we onze code corrigeren:
catch (error) {
if (error.name == 'SyntaxError') {
alert('Ongeldige JSON van product');
} else if (error.name == 'ProductCostError') {
alert('Het product heeft geen prijs of hoeveelheid');
} else {
throw error; // uitzondering verder doorgooien
}
}
De volgende code is gegeven:
try {
let arr = JSON.parse(json);
for (let i = 0; i < arr.length; i++) {
localStorage.setItem(i, arr[i]);
}
} catch (error) {
if (error.name == 'QuotaExceededError') {
alert('geen ruimte meer in opslag');
}
if (error.name == 'SyntaxError') {
alert('ongeldige JSON');
}
}
Wat is er mis met deze code? Verbeter het naar eene betere versie.