Запіс на курсы па HTML, CSS, JavaScript, PHP, Python, фрэймворкам і CMS,
а таксама: дапамога ў пошуку працы і заказаў, стажыроўка на рэальных праектах→
⊗jsSpExcPrb 150 of 294 menu

Пракід выключэнняў у JavaScript

Разгледзім блок catch задачы з JSON прадукту:

catch (error) { if (error.name == 'SyntaxError') { alert('Некарэктны JSON прадукту'); } else if (error.name == 'ProductCostError') { alert('У прадукту адсутнічае цана або колькасць'); } }

Як вы бачыце, мы лавім два запланаваныя намі выключэнні і як-то рэагуем на гэта. Але што будзе, калі ўзнікне не прадугледжанае намі выключэнне іншага тыпу? У гэтым выпадку яно таксама трапіць у блок catch, але ніякай рэакцыі на гэта не адбудзецца, так як выключэнне з іншым тыпам проста не трапіць ні ў адзін з нашых іфаў.

Калі я кажу, што не будзе ніякай рэакцыі, то маю на ўвазе, што рэальна ніякай: нават не будзе вываду памылкі ў кансоль. Наш код проста маўчкі не будзе працаваць.

Таму існуе наступнае правіла: ваш код павінен лавіць толькі тыя выключэнні, з якімі ведае, як справіцца. Калі выключэнне невядомае, то яго трэба пракінуць далей з дапамогай throw. У гэтым выпадку вышэй яго зловіць хто-то больш асведчаны альбо выключэнне вываліцца памылкай у кансоль.

Давайце паправім наш код:

catch (error) { if (error.name == 'SyntaxError') { alert('Некарэктны JSON прадукту'); } else if (error.name == 'ProductCostError') { alert('У прадукту адсутнічае цана або колькасць'); } else { throw error; // пракідваем выключэнне далей } }

Дадзены наступны код:

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'); } }

Што не так з гэтым кодам? Выпраўце яго на больш удалы.

byenru