Verständnis try..catch in Javascript

7

Ich habe dieses Problem versuchen und fangen. Ich versuche, auf eine andere Seite umzuleiten. Aber manchmal tut es und manchmal nicht. Ich denke, das Problem besteht darin, zu versuchen und zu fangen. kann mir jemand helfen das zu verstehen. Danke

%Vor%     
Autolycus 15.04.2010, 16:32
quelle

2 Antworten

19

Ich denke, Ihr Hauptproblem ist, dass Sie Ausnahmen verschlucken, was sehr schlecht ist. Deshalb "funktioniert es manchmal". Etwas wirft eine Ausnahme, und du fängst es an, aber danach machst du nichts anderes mehr. Zumindest würde ich eine Art Fehlermeldung in Ihrem catch Block anzeigen.

Ein paar andere Probleme:

  • Sind Sie sicher, dass Sie diese mehreren try..catch Blöcke benötigen? Die aktuelle Annahme in Ihrem Code ist, dass jede Zeile, die in ein try..catch eingeschlossen ist, unabhängig von den anderen ist, und die Ausführung kann trotzdem fortgesetzt werden, wenn etwas in einer (oder mehreren) dieser Anweisungen schief geht. Bist du sicher, dass du das willst? Wenn ja, gibt es definitiv einen besseren Weg, damit umzugehen.
  • Wenn die Anweisungen nicht unabhängig voneinander sind und ein Fehler zu irgendeinem Zeitpunkt bedeutet, dass die Ausführung nicht möglich ist, können Sie alle Anweisungen in a einfügen single try..catch blockieren und eine Fehlermeldung in catch anzeigen
  • Wie ich schon sagte, ist das Schlucken von Ausnahmen sehr schlecht ! Du versteckst das Problem und erreichst nichts. Es macht auch das Debuggen extrem schwierig, weil die Dinge nicht mehr funktionieren und Sie keine Ahnung haben, warum (keine Ausnahme, keine Protokollierung, keine Fehlermeldungen). Ausnahmen werden verwendet, wenn etwas Unerwartetes passiert, das den normalen Programmablauf unterbricht. Es ist etwas, das du definitiv behandeln willst.

Ich denke, was Sie wollen, kann so gemacht werden:

%Vor%

Auf diese Weise behandelt der Block catch den Fall, wenn irgendwo in diesen Anweisungen eine Ausnahme auftritt.

Javascript hat auch keine echten checked-Ausnahmen. Sie können das umgehen, indem Sie einen einzelnen try-Block verwenden und das Ausnahmeobjekt untersuchen, das Sie erhalten * .

Erweitern wir das, worüber ich schon gesprochen habe, gibt es zwei Möglichkeiten, Ausnahmen zu behandeln. Der erste Weg, wie ich zuvor gezeigt habe, geht davon aus, dass sich der Code bei einer Ausnahme in einem ungültigen / undefinierten Zustand befindet und dies bedeutet, dass der Code einen nicht behebbaren Fehler gefunden hat. Eine andere Möglichkeit, Ausnahmen zu behandeln, ist, wenn Sie wissen, dass Sie etwas wiederherstellen können. Sie können dies mit einer Flagge tun. Also:

%Vor%

In diesem Fall hängt der Ablauf Ihrer Logik davon ab, dass eine Ausnahme ausgelöst wird. Wichtig ist, dass die Ausnahme wiederherstellbar ist und abhängig davon, ob sie ausgelöst wurde oder nicht, Sie verschiedene Dinge tun.

* Hier ist ein etwas erfundenes Beispiel, das checked-exceptions demonstriert. Ich habe zwei Ausnahmen namens VeryBadException und ReallyBadException , die (zufällig) aus zwei Funktionen geworfen werden können. Der Block catch behandelt die Ausnahme und ermittelt mithilfe des Operators instanceof , welche Art von Ausnahme vorliegt:

%Vor%     
Vivin Paliath 15.04.2010 16:38
quelle
3

Es ist eine gute Übung, etwas mit den gefangenen Ausnahmen zu machen.

Was passiert hier ist, dass, wenn es einen Fehler gibt (sagen Laden einer Seite fehlschlägt) eine Ausnahme in einem Ihrer try-Blöcke geworfen wird. Der entsprechende catch-Block packt ihn und sagt "diese Exception wurde behandelt", aber in Wirklichkeit hast du nichts damit gemacht.

Versuchen Sie, einen Ausdruck zu erstellen (e.Message); innerhalb Ihrer catch-Blöcke, um genau herauszufinden, welcher Fehler die Seite verursacht, laden Sie nicht und fügen dann Code zu Ihrem catch-Block hinzu, um diesen Fehler zu beheben.

    
Nick Udell 15.04.2010 16:39
quelle