Izņēmumi asinhronajos izsaukumos JavaScript
Pieņemsim, ka, ja parametram make nodots
neesoša masīva elementa numurs -
tā ir izņēmuma situācija. Kā jūs jau zināt,
izņēmumi, kas radušies asinhronas
funkcijas iekšienē, nevar tikt noķerti ar try-catch.
Mūsu gadījumā izņēmums, kas radies iekšpus
make vai izsaukuma, netiks noķerts:
try {
make(10, function(res) {
console.log(res);
});
} catch(err) {
// netiks noķerts
}
Izsaukuma pieejā ar izņēmumiem strādā šādi: pirmajā izsaukuma parametrā nosūta rezultātu, bet otrajā - kļūdu. Šajā gadījumā kļūdu apstrāde notiek šādi:
make(10, function(res, err) {
if (!err) {
console.log(res); // kļūda neradās, izvadīsim rezultātu
} else {
console.log(err); // kļūda radās, izvadīsim tās tekstu
}
});
Pārveidosim mūsu funkcijas
make kodu atbilstoši aprakstītajam:
function make(num, callback) {
setTimeout(function() {
let arr = [1, 2, 3, 4, 5];
let err;
if (arr[num] === undefined) {
err = 'elem not exists'; // kļūdas teksts
} else {
err = null; // kļūdas nav
}
callback(arr[num], err);
}, 3000);
}