⊗jsSpExcPrb 150 of 294 menu

Prosleđivanje izuzetaka u JavaScript-u

Razmotrimo blok catch zadatka sa JSON proizvoda:

catch (error) { if (error.name == 'SyntaxError') { alert('Nekorektan JSON proizvoda'); } else if (error.name == 'ProductCostError') { alert('Proizvodu nedostaje cena ili količina'); } }

Kao što vidite, hvatamo dva od nas planirana izuzetka i na neki način reagujemo na to. Ali šta će se desiti ako se pojavi nepredviđeno izuzetak drugog tipa? U tom slučaju on će takođe upasti u blok catch, ali nikakva reakcija na to neće uslediti, jer izuzetak drugog tipa jednostavno neće upasti ni u jedan od naših if-ova.

Kada kažem da neće biti nikakve reakcije, mislim da stvarno nikakve: čak neće biti ni ispisivanja greške u konzolu. Naš kod će jednostavno ćutati i neće raditi.

Zato postoji sledeće pravilo: vaš kod treba da hvata samo one izuzetke sa kojima zna kako da se izbori. Ako je izuzetak nepoznat, onda ga treba proslediti dalje pomoću throw. U tom slučaju iznad će ga uhvatiti neko bolje upućen ili će se izuzetak ispisati kao greška u konzolu.

Hajde da ispravimo naš kod:

catch (error) { if (error.name == 'SyntaxError') { alert('Nekorektan JSON proizvoda'); } else if (error.name == 'ProductCostError') { alert('Proizvodu nedostaje cena ili količina'); } else { throw error; // prosleđujemo izuzetak dalje } }

Dat je sledeći kod:

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('ponestalo je mesta u skladištu'); } if (error.name == 'SyntaxError') { alert('nekorektan JSON'); } }

Šta nije u redu sa ovim kodom? Ispravite ga na bolju verziju.

Srpski
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Koristimo kolačiće za rad sajta, analitiku i personalizaciju. Obrada podataka se vrši u skladu sa Politikom privatnosti.
prihvati sve podesi odbij