⊗jsSpExcPrb 150 of 294 menu

Poikkeusten heittäminen eteenpäin JavaScriptissä

Tarkastellaan JSON-tuotteen tehtävän catch-lohkoa:

catch (error) { if (error.name == 'SyntaxError') { alert('Virheellinen JSON-tuote'); } else if (error.name == 'ProductCostError') { alert('Tuotteella ei ole hintaa tai määrää'); } }

Kuten näet, saalisimme kaksi suunnittelemaamme poikkeusta ja reagoimme jollakin tavalla niihin. Mutta mitä tapahtuu, jos ilmaantuu meille ennakkoon suunnittelematon toisen tyyppinen poikkeus? Tässä tapauksessa se myös päätyy catch-lohkoon, mutta minkäänlaista reaktiota ei seuraa, koska toisen tyyppinen poikkeus ei yksinkertaisesti päädy mihinkään if-lauseistamme.

Kun sanon, ettei mitään reaktiota tule, tarkoitan, että todella mitään: edes virheen putoamista konsoliin ei tapahdu. Koodimme ei toimi vain hiljaa.

Siksi on olemassa seuraava sääntö: koodisi pitäisi saalistaa vain ne poikkeukset, joiden kanssa se tietää, kuinka selviytyä. Jos poikkeus on tuntematon, se on heitettävä eteenpäin käyttämällä throw. Tässä tapauksessa sen yläpuolella saalii joku paremmin tietoinen tai poikkeus putoaa virheenä konsoliin.

Korjataan koodimme:

catch (error) { if (error.name == 'SyntaxError') { alert('Virheellinen JSON-tuote'); } else if (error.name == 'ProductCostError') { alert('Tuotteella ei ole hintaa tai määrää'); } else { throw error; // heitetään poikkeus eteenpäin } }

Annettuna on seuraava koodi:

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('tila loppui tallennustilasta'); } if (error.name == 'SyntaxError') { alert('virheellinen JSON'); } }

Mikä tässä koodissa on vialla? Korjaa se onnistuneemmaksi.

Suomi
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Käytämme evästeitä verkkosivuston toiminnalle, analytiikalle ja personoinnille. Tietojen käsittely tapahtuu Tietosuojakäytännön mukaisesti.
hyväksy kaikki mukauta hylkää