Uitzonderingen in asynchrone callbacks in JavaScript
Stel dat als aan de parameter make een
nummer van een niet-bestaand array-element wordt doorgegeven -
dit een uitzonderlijke situatie is. Zoals je al weet,
kunnen uitzonderingen die ontstaan binnen een asynchrone
functie, niet worden opgevangen via try-catch.
In ons geval zal de uitzondering die ontstaat binnen
make of de callback, niet worden opgevangen:
try {
make(10, function(res) {
console.log(res);
});
} catch(err) {
// wordt niet opgevangen
}
In de callback-aanpak werkt men met uitzonderingen als volgt: naar de eerste parameter van de callback wordt het resultaat gestuurd, en naar de tweede - de fout. In dit geval verloopt de foutafhandeling als volgt:
make(10, function(res, err) {
if (!err) {
console.log(res); // er was geen fout, toon het resultaat
} else {
console.log(err); // er was een fout, toon de tekst ervan
}
});
Laten we de code van onze functie
make aanpassen volgens de beschreven aanpak:
function make(num, callback) {
setTimeout(function() {
let arr = [1, 2, 3, 4, 5];
let err;
if (arr[num] === undefined) {
err = 'elem not exists'; // fouttekst
} else {
err = null; // geen fout
}
callback(arr[num], err);
}, 3000);
}