⊗jsSpExcPrb 150 of 294 menu

Przekazywanie wyjątków w JavaScript

Rozważmy blok catch zadania z produktem JSON:

catch (error) { if (error.name == 'SyntaxError') { alert('Nieprawidłowy JSON produktu'); } else if (error.name == 'ProductCostError') { alert('Produkt nie ma ceny lub ilości'); } }

Jak widzisz, łapiemy dwa zaplanowane przez nas wyjątki i w jakiś sposób na nie reagujemy. Ale co się stanie, jeśli wystąpi nieprzewidziany przez nas wyjątek innego typu? W tym przypadku również trafi on do bloku catch, ale nie nastąpi żadna reakcja, ponieważ wyjątek z innym typem po prostu nie trafi do żadnego z naszych warunków if.

Kiedy mówię, że nie będzie żadnej reakcji, mam na myśli, że naprawdę żadnej: nawet nie będzie wyrzucenia błędu do konsoli. Nasz kod po prostu po cichu nie będzie działał.

Dlatego istnieje następująca zasada: twój kod powinien łapać tylko te wyjątki, z którymi wie, jak sobie poradzić. Jeśli wyjątek jest nieznany, to należy go przekazać dalej za pomocą throw. W tym przypadku wyżej złapie go ktoś bardziej poinformowany lub wyjątek zostanie wyrzucony jako błąd do konsoli.

Poprawmy nasz kod:

catch (error) { if (error.name == 'SyntaxError') { alert('Nieprawidłowy JSON produktu'); } else if (error.name == 'ProductCostError') { alert('Produkt nie ma ceny lub ilości'); } else { throw error; // przekazujemy wyjątek dalej } }

Dany jest następujący 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('skończyło się miejsce w pamięci'); } if (error.name == 'SyntaxError') { alert('nieprawidłowy JSON'); } }

Co jest nie tak z tym kodem? Popraw go na bardziej udany.

Polski
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Wykorzystujemy pliki cookie do działania strony, analizy i personalizacji. Przetwarzanie danych odbywa się zgodnie z Polityką prywatności.
zaakceptuj wszystkie dostosuj odrzuć