Pengecualian dalam Callback Asinkron di JavaScript
Misalkan, jika parameter make dilewatkan
nomor elemen array yang tidak ada -
itu adalah situasi pengecualian. Seperti yang sudah Anda ketahui,
pengecualian yang muncul di dalam fungsi asinkron
tidak dapat ditangkap melalui try-catch.
Dalam kasus kita, pengecualian yang muncul di dalam
make atau callback, tidak akan tertangkap:
try {
make(10, function(res) {
console.log(res);
});
} catch(err) {
// tidak akan tertangkap
}
Dalam pendekatan callback, bekerja dengan pengecualian dilakukan sebagai berikut: parameter pertama callback digunakan untuk mengirim hasil, dan yang kedua - untuk kesalahan. Dalam hal ini, penanganan kesalahan terjadi sebagai berikut:
make(10, function(res, err) {
if (!err) {
console.log(res); // tidak ada kesalahan, tampilkan hasil
} else {
console.log(err); // kesalahan terjadi, tampilkan teksnya
}
});
Mari kita ubah kode fungsi kita
make sesuai dengan yang dijelaskan:
function make(num, callback) {
setTimeout(function() {
let arr = [1, 2, 3, 4, 5];
let err;
if (arr[num] === undefined) {
err = 'elem not exists'; // teks kesalahan
} else {
err = null; // tidak ada kesalahan
}
callback(arr[num], err);
}, 3000);
}