Melempar Pengecualian di JavaScript
Perhatikan blok catch dari tugas dengan produk JSON:
catch (error) {
if (error.name == 'SyntaxError') {
alert('JSON produk tidak valid');
} else if (error.name == 'ProductCostError') {
alert('Produk tidak memiliki harga atau kuantitas');
}
}
Seperti yang Anda lihat, kita menangkap dua pengecualian
yang telah kita rencanakan dan memberikan respons tertentu.
Tapi apa yang terjadi jika muncul pengecualian lain
yang tidak kita antisipasi? Dalam kasus ini,
pengecualian itu juga akan masuk ke blok catch, tetapi
tidak akan ada respons apa pun,
karena pengecualian dengan tipe lain tidak akan masuk
ke dalam kondisi if mana pun yang kita miliki.
Ketika saya mengatakan tidak akan ada respons, yang saya maksud adalah benar-benar tidak ada: bahkan tidak akan ada pesan error yang muncul di konsol. Kode kita diam saja dan tidak akan bekerja.
Oleh karena itu, ada aturan berikut: kode Anda
harus menangkap hanya pengecualian yang
diketahui cara menanganinya. Jika pengecualian
tidak dikenal, maka harus dilempar
lebih jauh menggunakan throw. Dalam hal ini
pengecualian akan ditangkap oleh sesuatu yang lebih mengetahui
atau pengecualian akan muncul sebagai error di konsol.
Mari kita perbaiki kode kita:
catch (error) {
if (error.name == 'SyntaxError') {
alert('JSON produk tidak valid');
} else if (error.name == 'ProductCostError') {
alert('Produk tidak memiliki harga atau kuantitas');
} else {
throw error; // melempar pengecualian lebih jauh
}
}
Diberikan kode berikut:
try {
let arr = JSON.parse(json);
for (let i = 0; i < arr.length; i++) {
localStorage.setItem(i, arr[i]);
}
} catch (error) {
if (error.name == 'QuotaExceededError') {
alert('ruang penyimpanan habis');
}
if (error.name == 'SyntaxError') {
alert('JSON tidak valid');
}
}
Apa yang salah dengan kode ini? Perbaiki menjadi yang lebih baik.