Izjeme v asinhronih klicnih funkcijah v JavaScript
Recimo, da je prejet parameter make
številka neobstoječega elementa matrike -
to je izjemna situacija. Kot že veste,
izjeme, ki nastanejo znotraj asinhrone
funkcije, ni mogoče ujeti z try-catch.
V našem primeru izjema, ki nastane znotraj
make ali klicne funkcije, ne bo ujeta:
try {
make(10, function(res) {
console.log(res);
});
} catch(err) {
// ne bo ujeta
}
V pristopu s klicnimi funkcijami delujejo z izjemami na naslednji način: v prvi parameter klicne funkcije pošljejo rezultat, v drugi pa napako. V tem primeru obdelava napak poteka na naslednji način:
make(10, function(res, err) {
if (!err) {
console.log(res); // ni prišlo do napake, izpišemo rezultat
} else {
console.log(err); // prišlo je do napake, izpišemo njeno besedilo
}
});
Prilagodimo kode naše funkcije
make v skladu z zgoraj opisanim:
function make(num, callback) {
setTimeout(function() {
let arr = [1, 2, 3, 4, 5];
let err;
if (arr[num] === undefined) {
err = 'elem not exists'; // besedilo napake
} else {
err = null; // ni napake
}
callback(arr[num], err);
}, 3000);
}