JavaScript-da asinxron callback-larda istisnolar
Faraz qilaylik, make parametri sifatida
massivning mavjud bo‘lmagan elementining raqami
berilgan bo‘lsa - bu istisno vaziyatidir. Siz allaqachon bilasizki,
asinxron funktsiya ichida paydo bo‘lgan
istisnolar try-catch orqali ushlab bo‘lmaydi.
Bizning holatda, make yoki callback ichida
paydo bo‘lgan istisno ushlanmaydi:
try {
make(10, function(res) {
console.log(res);
});
} catch(err) {
// ushlanmaydi
}
Callback-yondashuvida istisnolar bilan quyidagicha ishlanadi: callbackning birinchi parametriga natija, ikkinchisiga esa - xato yuboriladi. Bunda xatolarni boshqarish quyidagicha amalga oshiriladi:
make(10, function(res, err) {
if (!err) {
console.log(res); // xato yuz bermadi, natijani chiqaramiz
} else {
console.log(err); // xato yuz berdi, uning matnini chiqaramiz
}
});
Keling, bizning make funktsiyamiz kodini
tasvirlanganiga mos ravishda o‘zgartiramiz:
function make(num, callback) {
setTimeout(function() {
let arr = [1, 2, 3, 4, 5];
let err;
if (arr[num] === undefined) {
err = 'elem not exists'; // xato matni
} else {
err = null; // xato yo‘q
}
callback(arr[num], err);
}, 3000);
}