⊗jsSpExcPrb 150 of 294 menu

JavaScriptда истисноларни узатиш

JSON маҳсулот вазифасининг catch блогини кўриб чиқайлик:

catch (error) { if (error.name == 'SyntaxError') { alert('Нотўғри JSON маҳсулот'); } else if (error.name == 'ProductCostError') { alert('Маҳсулотда нарх ёки миқдор йўқ'); } }

Кўриб тургангиздек, биз ўзимиз режалаштирган иккита истиснони ушлаб оламиз ва унга қандайдир реакция кўрсатамиз. Аммо, агар биз кўзлаганмиздан бошқа турдаги истисно юзага келса нима бўлади? Бу ҳолда у ҳам catch блокига тушadi, лекин унга ҳеч қандай реакция бўлмайди, чунки бошқа турдаги истисно бизнинг ифларимизнинг биронтига ҳам кирмайди.

Ҳеч қандай реакция бўлмайди, деганда, менинг нутқимда, ҳақиқатан ҳам ҳеч нарса: ҳатто консолда хатолик чиқмайди. Бизнинг кодимиз жуда скин ишламай қолади.

Шу сабабдан, куйидаги қоидa мавжуд: сизнинг кодингиз фақат ўзи билан қандай ҳал қилишни биладиган истисноларни ушлаб олиши керак. Агар истисно номаълум бўлса, уни throw ёрдамида узатиб юбориш керак. Бу ҳолда юқорида уни кимдир яна бир билимдон ушлаб олади ёки истисно консолда хатолик сифатида намoён бўлади.

Келинг, кодимизни тўғрилаймиз:

catch (error) { if (error.name == 'SyntaxError') { alert('Нотўғри JSON маҳсулот'); } else if (error.name == 'ProductCostError') { alert('Маҳсулотда нарх ёки миқдор йўқ'); } else { throw error; // истиснони keyингига узатамиз } }

Куйидаги код берилган:

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('сақлаш жойида жой тамом бўлди'); } if (error.name == 'SyntaxError') { alert('нотўғри JSON'); } }

Бу кодда нима ноўрин? Уни янада яхширўқ қилиб тўғриланг.

idsvdepluz