Undantag i asynkrona callbacks i JavaScript
Låt oss anta att om ett nummer för ett icke-existerande element i arrayen skickas som parameter till make -
detta är ett exceptionellt tillstånd. Som du redan vet,
undantag som uppstår inuti en asynkron
funktion kan inte fångas via try-catch.
I vårt fall kommer undantaget som uppstått inuti
make eller callback-funktionen inte att fångas:
try {
make(10, function(res) {
console.log(res);
});
} catch(err) {
// kommer inte att fångas
}
I callback-tillvägagångssättet arbetar man med undantag på följande sätt: den första parametern i callback-funktionen skickar resultatet, och den andra - felet. I detta fall sker felhanteringen på följande sätt:
make(10, function(res, err) {
if (!err) {
console.log(res); // inget fel uppstod, skriv ut resultatet
} else {
console.log(err); // ett fel uppstod, skriv ut dess text
}
});
Låt oss ändra koden för vår funktion
make i enlighet med det som beskrivits:
function make(num, callback) {
setTimeout(function() {
let arr = [1, 2, 3, 4, 5];
let err;
if (arr[num] === undefined) {
err = 'elem not exists'; // feltext
} else {
err = null; // inget fel
}
callback(arr[num], err);
}, 3000);
}