⊗jsSpExcPrb 150 of 294 menu

Posredovanje izjem v JavaScriptu

Oglejmo si blok catch naloge z JSON produkta:

catch (error) { if (error.name == 'SyntaxError') { alert('Nekorekten JSON produkta'); } else if (error.name == 'ProductCostError') { alert('Produkt nima cene ali količine'); } }

Kot vidite, ujamemo dve načrtovani izjemi in se na to na nek način odzovemo. Toda kaj se zgodi, če pride do nepredvidene izjeme drugega tipa? V tem primeru bo prav tako prišla v blok catch, vendar se na to ne bo zgodilo nobenega odziva, saj izjema z drugim tipom preprosto ne bo padla v nobenega od naših if stavkov.

Ko rečem, da ne bo nobenega odziva, mislim, da resnično nobenega: celo ne bo prišlo do izpisa napake v konzolo. Naša koda preprosto ne bo delovala tiho.

Zato obstaja naslednje pravilo: vaša koda mora ujeti samo tiste izjeme, s katerimi ve, kako ravnati. Če je izjema neznana, jo je treba posredovati naprej s pomočjo throw. V tem primeru bo izjemo ujel kdo bolj podkovan ali pa bo izjema prišla do konzole kot napaka.

Popravimo našo kodo:

catch (error) { if (error.name == 'SyntaxError') { alert('Nekorekten JSON produkta'); } else if (error.name == 'ProductCostError') { alert('Produkt nima cene ali količine'); } else { throw error; // posredujemo izjemo naprej } }

Podana je naslednja koda:

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('zmanjkalo je prostora v shrambi'); } if (error.name == 'SyntaxError') { alert('nekorekten JSON'); } }

Kaj je narobe s to kodo? Popravite jo na boljšo različico.

Slovenščina
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Za delovanje spletnega mesta, analitiko in personalizacijo uporabljamo piškotke. Obdelava podatkov poteka v skladu s Politiko zasebnosti.
sprejmi vse nastavi zavrni