Բացառությունների նետումը JavaScript-ում
Դիտարկենք JSON ապրանքի առաջադրանքի catch բլոկը:
catch (error) {
if (error.name == 'SyntaxError') {
alert('Անվավեր JSON ապրանք');
} else if (error.name == 'ProductCostError') {
alert('Ապրանքը չունի գին կամ քանակ');
}
}
Ինչպես տեսնում եք, մենք բռնում ենք մեր կողմից նախատեսված
երկու բացառություն և ինչ-որ կերպ արձագանքում դրան:
Բայց ի՞նչ կլինի, եթե առաջանա մեր կողմից չնախատեսված
մեկ այլ տիպի բացառություն: Այս դեպքում այն նույնպես
կմտնի catch բլոկ, բայց
դրա վրա ոչ մի արձագանք չի հաջորդի, քանի որ
մեկ այլ տիպով բացառությունը պարզապես չի մտնի
մեր if-երից որևէ մեկի մեջ:
Երբ ասում եմ, որ ոչ մի արձագանք չի լինի, նկատի ունեմ, որ իրականում ոչ մի: նույնիսկ սխալի կոնսոլում ցուցադրվելը չի լինի: Մեր կոդը պարզապես լռելյայն չի աշխատի:
Ուստի գոյություն ունի հետևյալ կանոնը. ձեր
կոդը պետք է բռնի միայն այն բացառությունները, որոնցից
գիտի, թե ինչպես դուրս գալ: Եթե բացառությունը
անծանոթ է, ապա այն պետք է նետել
հետագա օգտագործելով 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');
}
}
Ի՞նչ է սխալ այս կոդում: Ուղղեք այն ավելի հաջող տարբերակով: