⊗jsSpExcPrb 150 of 294 menu

Klaidų perleidimas JavaScript

Panagrinėkime catch bloką JSON produkto užduotyje:

catch (error) { if (error.name == 'SyntaxError') { alert('Netinkamas produkto JSON'); } else if (error.name == 'ProductCostError') { alert('Produktui trūksta kainos arba kiekio'); } }

Kaip matote, mes sugavome dvi mūsų planuotas išimtis ir kažkaip reaguojame į tai. Bet kas atsitiks, jei atsiras mūsų nenumatytas kitos rūšies išimtis? Šiuo atveju ji taip pat pateks į catch bloką, bet jokia reakcija į tai nebus, nes išimtis su kitu tipu tiesiog nepateks į nė vieną mūsų if sąlygą.

Kai sakau, kad nebus jokios reakcijos, turiu omenyje, kad tikrai jokios: net nebus klaidos išvedimo į konsolę. Mūsų kodas tiesiog tyliai neveiks.

Todėl egzistuoja tokia taisyklė: jūsų kodas turi sugauti tik tas išimtis, su kuriomis žino, kaip susitvarkyti. Jei išimtis yra nepažįstama, tuomet ją reikia perleisti toliau naudojant throw. Šiuo atveju aukščiau ją pagaus kas nors labiau informuotas arba išimtis bus išmesta kaip klaida į konsolę.

Pataisykime mūsų kodą:

catch (error) { if (error.name == 'SyntaxError') { alert('Netinkamas produkto JSON'); } else if (error.name == 'ProductCostError') { alert('Produktui trūksta kainos arba kiekio'); } else { throw error; // perleidžiame išimtį toliau } }

Duotas toks kodas:

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('pasibaigė vietos saugykloje'); } if (error.name == 'SyntaxError') { alert('netinkamas JSON'); } }

Kas negerai su šiuo kodu? Pataisykite jį į labiau tinkamą.

Lietuvių
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Mes naudojame slapukus svetainės veikimui, analizei ir personalizavimui. Duomenų apdorojimas vyksta pagal Privatumo politiką.
priimti visus nustatyti atšaukti