Hedhja e Përjashtimeve në JavaScript
Le të shqyrtojmë bllokun catch të detyrës me JSON-in e produktit:
catch (error) {
if (error.name == 'SyntaxError') {
alert('JSON i pasaktë i produktit');
} else if (error.name == 'ProductCostError') {
alert('Produktit i mungon çmimi ose sasia');
}
}
Siç e shihni, ne kapim dy përjashtime të planifikuara
nga ne dhe reagojmë disi ndaj kësaj.
Por çfarë do të ndodhë nëse lind një përjashtim
i paparashikuar nga ne i një lloji tjetër? Në këtë rast
ai do të bjerë gjithashtu në bllokun catch, por
asnjë reaksion nuk do të ndodhë,
pasi përjashtimi me një lloj tjetër thjesht nuk do të bjerë
në asnjë nga if-et tona.
Kur them se nuk do të ketë asnjë reaksion, dua të them se vërtet asnjë: madje nuk do të ketë asnjë shfaqje të gabimit në konsol. Kodi ynë thjesht nuk do të funksionojë në heshtje.
Prandaj ekziston rregulli i mëposhtëm: kodi
juaj duhet të kapë vetëm ato përjashtime, me
të cilat di si të përballojë. Nëse përjashtimi
është i panjohur, atëherë ai duhet të hedhet
më tej duke përdorur throw. Në këtë rast
më lart do ta kapë dikush më i informuar
ose përjashtimi do të shfaqet si gabim në konsol.
Le të korrigjojmë kodin tonë:
catch (error) {
if (error.name == 'SyntaxError') {
alert('JSON i pasaktë i produktit');
} else if (error.name == 'ProductCostError') {
alert('Produktit i mungon çmimi ose sasia');
} else {
throw error; // hedhim përjashtimin më tej
}
}
Është dhënë kodi i mëposhtëm:
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('u mbarua hapësira në depo');
}
if (error.name == 'SyntaxError') {
alert('JSON i pasaktë');
}
}
Çfarë nuk shkon me këtë kod? Përmirësojeni atë me një version më të suksesshëm.