⊗jsSpExcPrb 150 of 294 menu

Ausnahmeweitergabe in JavaScript

Betrachten wir den catch-Block der Aufgabe mit dem JSON-Produkt:

catch (error) { if (error.name == 'SyntaxError') { alert('Ungültiges JSON-Produkt'); } else if (error.name == 'ProductCostError') { alert('Dem Produkt fehlt der Preis oder die Menge'); } }

Wie Sie sehen, fangen wir zwei von uns geplante Ausnahmen ab und reagieren irgendwie darauf. Aber was passiert, wenn eine nicht von uns vorgesehene Ausnahme eines anderen Typs auftritt? In diesem Fall wird sie ebenfalls in den catch-Block gelangen, aber es wird keine Reaktion darauf erfolgen, da die Ausnahme mit einem anderen Typ einfach in keine unserer if-Bedingungen passt.

Wenn ich sage, dass es keine Reaktion geben wird, meine ich, dass es wirklich keine gibt: nicht einmal eine Fehlerausgabe in der Konsole. Unser Code wird einfach stillschweigend nicht funktionieren.

Daher gibt es die folgende Regel: Ihr Code sollte nur die Ausnahmen abfangen, mit denen er umzugehen weiß. Wenn die Ausnahme unbekannt ist, muss sie mit throw weiter geworfen werden. In diesem Fall wird sie weiter oben von jemandem abgefangen, der besser informiert ist, oder die Ausnahme wird als Fehler in der Konsole ausgegeben.

Korrigieren wir unseren Code:

catch (error) { if (error.name == 'SyntaxError') { alert('Ungültiges JSON-Produkt'); } else if (error.name == 'ProductCostError') { alert('Dem Produkt fehlt der Preis oder die Menge'); } else { throw error; // Ausnahme weiter werfen } }

Gegeben ist der folgende Code:

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('Speicherplatz im Storage ist aufgebraucht'); } if (error.name == 'SyntaxError') { alert('Ungültiges JSON'); } }

Was ist an diesem Code falsch? Korrigieren Sie ihn auf eine bessere Version.

rosvesuzpt