Wie würden Sie verschiedene Arten von Fehlern implementieren, damit Sie bestimmte Fehler abfangen und andere in die Luft sprudeln lassen können?
Eine Möglichkeit, dies zu erreichen, besteht darin, den Prototyp des Error
Objekts zu ändern :
Error.prototype.sender = "";
function throwSpecificError()
{
var e = new Error();
e.sender = "specific";
throw e;
}
Fangspezifischer Fehler:
try
{
throwSpecificError();
}
catch (e)
{
if (e.sender !== "specific") throw e;
// handle specific error
}
Habt ihr Alternativen?
javascript
error-handling
cllpse
quelle
quelle
Error
hat Probleme. Siehe stackoverflow.com/questions/1382107/…} catch (e) { if (e.name == 'SpecificError') { // specific error } else { throw e; // let others bubble up } }
ist, dass er in IE7 nicht funktioniert und den Fehler "Ausnahme ausgelöst und nicht abgefangen" auslöst. Es folgt die äußerst dumme (wie immer) Erklärung von msdn: "Sie haben eine throw-Anweisung eingefügt, die jedoch nicht in einem try-Block enthalten war, oder es gab keinen zugehörigen catch-Block, um den Fehler abzufangen. Ausnahmen werden aus dem try-Block ausgelöst Verwenden der throw-Anweisung und Abfangen außerhalb des try-Blocks mit einer catch-Anweisung. "instanceOf
. Überprüfen Sie hiername
Eigenschaft der Konstruktorfunktion zu verwenden. Ich schlug vor, ein maßgeschneidertes Objekt mit einername
Eigenschaft zu werfen , die nicht kaputt geht ...Wie in den Kommentaren unten erwähnt, ist dies Mozilla-spezifisch, Sie können jedoch "bedingte Fang" -Blöcke verwenden. z.B:
Dies ähnelt zumindest syntaktisch eher der in Java verwendeten typisierten Ausnahmebehandlung.
quelle
This feature is non-standard and is not on a standards track. Do not use it on production sites facing the Web: it will not work for every user. There may also be large incompatibilities between implementations and the behavior may change in the future.
try-catch-finally.js
Mit try-catch-finally.js können Sie die
_try
Funktion mit einem anonymen Rückruf aufrufen, den sie.catch
aufruft , und Sie können Aufrufe verketten , um bestimmte Fehler abzufangen , und einen.finally
Aufruf, um sie in beide Richtungen auszuführen.Beispiel
Beispiel mit modernen Pfeilfunktionen und Vorlagenliteralen
quelle
Modul für den Export
In Skript importieren:
Verwenden:
Anrufcode extern:
quelle
Ich habe keine dieser Lösungen geliebt, also habe ich meine eigene gemacht. Die try-catch-finally.js ist ziemlich cool, außer dass, wenn Sie vor dem Versuch einen kleinen Unterstrich (_) vergessen, der Code immer noch einwandfrei läuft, aber nie etwas gefangen wird! Yuck.
CatchFilter
Ich habe meinem Code einen CatchFilter hinzugefügt:
Jetzt kann ich filtern
Jetzt kann ich wie in C # oder Java filtern:
quelle
quelle