Was wäre ein guter Weg, um Fehler in JavaScript zu melden, anstatt sich auf Nullen zu verlassen, und undefiniert, wenn Fehler auftreten und eine Funktion nicht fortfahren kann. Ich kann mir drei Ansätze vorstellen:
Hier ist ein einfaches Beispielszenario - eine Funktion, die einem Benutzerkonto den übergebenen Betrag gutschreibt. Die Funktion credit
ist Teil eines Account
-Objekts.
Hier ist die naive Lösung.
%Vor%Ein Hauptproblem bei diesem Ansatz sind ungültige Daten. Lassen Sie uns das beheben und verwenden Sie einen Rückgabewert, um anzuzeigen, dass der Vorgang fehlgeschlagen ist.
%Vor%Dies ist eine Verbesserung gegenüber der vorherigen, aber der Client-Code muss den Rückgabewert überprüfen, um sicherzustellen, dass die Operation erfolgreich war. Dies zu tun für im Grunde jede Methode im System kann mühsam werden.
%Vor%Ein dritter Ansatz, der dem zweiten ähnlich ist, ist das Auslösen einer Ausnahme. Da wir die Ausnahme selbst auslösen, könnte eine bestimmte Ausnahme eher als eine allgemeine Ausnahme ausgelöst werden.
%Vor%Ein vierter Ansatz, der dem Auslösen von Ausnahmen ähnelt, besteht darin, Assertionen in Ihrem Code zu verwenden. Ein Nachteil im Vergleich zu dem obigen Ansatz besteht darin, dass die Möglichkeit, benutzerdefinierte Ausnahmen auszulösen, verloren geht, da die Assertion generisch ist. Es ist jedoch immer noch möglich, das Objekt an jeden Assert-Aufruf zu übergeben.
%Vor% Eine globale assert
-Funktion ist einfach zu schreiben und macht den Code etwas kürzer.
Aus diesen Ansätzen heraus wäre das ein guter Weg, um mit unerwarteten Werten und unglücklichen Pfaden umzugehen. Gibt es andere Ansätze, die hier nicht erwähnt werden, die nützlich sein könnten?
Betrachten Sie ein clientseitiges Protokollierungs-Framework, um Fehler zu melden, z. B. Log4js . Man kann Nachrichten (d. H. Info, debug, warn, error) im Browser protokollieren oder Nachrichten an den Server über Ajax persistieren, abhängig von der Anwendung.
Die Log4js-Site bietet auch eine andere Liste von JavaScript-Protokollierungs-Frameworks .
Ein guter Ansatz wäre es, bei Verwendung des benutzerdefinierten Ausnahmebeispiels die Ausnahme auszulösen und den Fehler nach eigenem Ermessen zu protokollieren.
Ein Manko im Vergleich zu oben Ansatz ist das, seit die Behauptung ist generisch verlieren wir die Fähigkeit zu werfen benutzerdefinierte Ausnahmen
Nicht unbedingt:
%Vor%Konstruktoren sind Funktionen. Funktionen sind erstklassige Werte. Fühlen Sie sich frei, sie herumzugeben.
Tags und Links javascript error-handling assert defensive-programming