JavaScript-də İstisnaların Ötürülməsi
JSON məhsulu tapşırığının catch blokunu nəzərdən keçirək:
catch (error) {
if (error.name == 'SyntaxError') {
alert('Yalnış JSON məhsulu');
} else if (error.name == 'ProductCostError') {
alert('Məhsulun qiyməti və ya miqdarı yoxdur');
}
}
Gördüyünüz kimi, biz planlaşdırdığımız iki istisnanı
yaxalayırıq və buna bir şəkildə reaksiya veririk.
Bəs bizim tərəfimizdən nəzərdə tutulmayan başqa tipdə
bir istisna yaransa nə olar? Bu halda, o da catch
blokuna düşəcək, amma heç bir reaksiya verməyəcək,
çünki başqa tipdəki istisna heç bir if şərtimizə düşməyəcək.
Heç bir reaksiya olmayacaq deyəndə, mən həqiqətən də heç bir reaksiya nəzərdə tuturam: hətta konsola xəta çıxmayacaq. Kodumuz sadəcə olaraq səssizcə işləməyəcək.
Buna görə də aşağıdakı qayda var: sizin kodunuz yalnız
necə həll edəcəyini bildiyi istisnaları yaxalamalıdır.
Əgər istisna tanımadıqdırsa, onda onu throw
vasitəsilə ötürmək lazımdır. Bu halda, yuxarıda
onu daha məlumatlı biri yaxalayacaq və ya istisna konsolda
xəta kimi çıxacaq.
Gəlin kodumuzu düzəldək:
catch (error) {
if (error.name == 'SyntaxError') {
alert('Yalnış JSON məhsulu');
} else if (error.name == 'ProductCostError') {
alert('Məhsulun qiyməti və ya miqdarı yoxdur');
} else {
throw error; // istisnanı daha irəli ötürürük
}
}
Aşağıdakı kod verilmişdir:
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('depoda yer qurtardı');
}
if (error.name == 'SyntaxError') {
alert('yalnış JSON');
}
}
Bu kodda nə problem var? Onu daha uğurlu olanla düzəldin.