⊗jsSpExcPrb 150 of 294 menu

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.

trcshuitpt