Übergeben Sie Fehlergrund in geworfenem Objekt / Wie man Fehler in modernem JavaScript behandelt [geschlossen]

8

Ich entwickle ein kleines Node.js-Paket, das einen Parser enthält. Es wird ausgelöst, sobald ein nicht behebbares Problem festgestellt wird.

Ich habe Java schon seit einigen Jahren benutzt und bin an eine Menge von Ausnahmeklassen gewöhnt.

Aber das ist JavaScript. Ich denke, es ist eine Frage des Stils. Mein wesentliches Problem ist, wie man den Fehlergrund übergibt, um Blöcke zu fangen. Ich dachte daran, entweder verschiedene Error- "Klassen" für verschiedene Fehlergründe zu erstellen, von denen jeder sich um Details zu jedem Problem kümmert, oder eine einzelne Error-Klasse, die den Grund als Eigenschaft enthält.

Lassen Sie mich Ihnen ein Beispiel für die Behandlung beider Arten von Fehlern geben:

%Vor%

Welcher der Ansätze ist besser? Beide werden funktionieren, aber ich mag die erste nicht. Viele Klassen scheinen mir wie ein riesiger Overhead.

Bearbeiten:
Ich stimme der Verwendung von Callbacks zu (auch hier ):

%Vor%

Das Problem besteht weiterhin: Soll ich alle Klassen löschen und ein einfaches Objekt ohne prototypische Vererbung verwenden? Ich muss Informationen über das Problem an den Error-Handler übergeben (ob Catch oder Callback).

Ich möchte diese Funktion synchron halten, weil sie winzig und schnell ist (ja, ich weiß, dass ein Callback keine Funktion async macht). AFAIK Node.js selbst gibt Fehler in synchronem Code (fs.readFileSync) aus, während Fehlerobjekte an Rückrufe in asynchronen Funktionen übergeben werden (fs.readFile).

    
just lerning 14.06.2013, 23:30
quelle

1 Antwort

1

Ich denke, dass der beste Ansatz für Knoten darin besteht, das Modul im Callback-Stil neu zu schreiben. Allerdings sollten Sie zwei Argumente an Callbacks übergeben: Der erste ist error oder null (wenn der Vorgang erfolgreich abgeschlossen wurde), der zweite ist das Ergebnis der Operation (oder null oder undefined, wenn ein Fehler aufgetreten ist).

Dann können Sie sie einfach in Ihrem Rückruf behandeln. Sie können Fehler als Zeichenfolgen übergeben, dann nur Groß- / Kleinschreibung (Fehler), um verschiedene Situationen zu behandeln.

UPD:

Für Sync-Methoden können Sie Würfe verwenden, aber Sie können auch nur Strings werfen und sie dann wechseln. Wenn Sie Ihre Fehler typisieren möchten (zB wenn die Methode sehr unterschiedliche Fehler auslösen könnte (in Java-Code können sie in verschiedenen Klassen beschrieben werden), können Sie ein Objekt wie folgt verwenden: {error: 'error_name', type: 'error_type '}.

Und dann switch (err.type), switch (err.error).

Das Verwenden von Klassen dafür in Javascript ist nicht der beste Ansatz, da es einfach ein Objekt mit einer Prototypeigenschaft erstellt, das auf ein Konstruktorobjekt verweist, und instaceof diese Zeiger vergleicht.

    
yttrium 15.06.2013, 04:33
quelle