⊗jsSpExcPrb 150 of 294 menu

JavaScript-da istisnolarni uzatish

JSON mahsuloti vazifasi uchun catch blokini ko'rib chiqamiz:

catch (error) { if (error.name == 'SyntaxError') { alert('Noto‘g‘ri JSON mahsuloti'); } else if (error.name == 'ProductCostError') { alert('Mahsulotda narx yoki miqdor yo‘q'); } }

Ko'rib turganingizdek, biz rejalashtirgan ikkita istisnoni ushlaymiz va bunga qandaydir reaktsiya ko'rsatamiz. Ammo agar biz rejalashtirmagan boshqa turdagi istisno paydo bo'lsa nima bo'ladi? Bunday holda u catch blokiga tushadi, lekin unga hech qanday reaktsiya bo'lmaydi, chunki boshqa turdagi istisno bizning shartlarimizning hech biriga to'g'ri kelmaydi.

Hech qanday reaktsiya bo'lmasa deganida, men haqiqatan ham hech narsa bo'lmasligini nazarda tutyapman: hatto konsolda xato ham chiqmaydi. Bizning kodimiz shunchaki jim ishlamay qoladi.

Shuning uchun quyidagi qoida mavjud: sizning kodingiz faqat qanday hal qilishni biladigan istisnolarni ushlashi kerak. Agar istisno noma'lum bo'lsa, uni throw yordamida uzatib yuborish kerak. Bunday holda uni yuqorida ko'proq biladigan kimdir ushlaydi yoki istisno konsolda xato sifatida paydo bo'ladi.

Keling, kodimizni tuzatamiz:

catch (error) { if (error.name == 'SyntaxError') { alert('Noto‘g‘ri JSON mahsuloti'); } else if (error.name == 'ProductCostError') { alert('Mahsulotda narx yoki miqdor yo‘q'); } else { throw error; // istisnoni keyingi bosqichga uzatamiz } }

Quyidagi kod berilgan:

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('saqlash joyida joy qolmadi'); } if (error.name == 'SyntaxError') { alert('noto‘g‘ri JSON'); } }

Ushbu kodda nima noto‘g‘ri? Uni yaxshiroq versiyasiga o'zgartiring.

hyptplesid