JavaScript-Grundlagen: Fehlererfassungsmechanismus

JavaScript-Grundlagen: Fehlererfassungsmechanismus

Vorwort

Die JavaScript-Engine ist ein Single-Thread-System. Wenn also eine Ausnahme auftritt, wird die Ausführung der JavaScript-Engine normalerweise beendet, der nachfolgende Code blockiert und eine Ausnahmemeldung ausgegeben. Daher sollten wir vorhersehbare Ausnahmen erfassen und sie Benutzern oder Entwicklern korrekt anzeigen.

Error-Objekt

Wenn ein Laufzeitfehler auftritt, wird eine Fehlerinstanz ausgelöst.

Das Fehlerobjekt hat zwei Eigenschaften:

  • err.name: Fehlername/Fehlertyp
  • err.message: Fehlermeldung

Erstellen eines Fehlers

neuer Fehler([Nachricht[,Dateiname[,Zeilennummer]]])

Fehlertyp js definiert die folgenden 7 Fehlertypen:

  1. Fehler
  2. Fehlerauswertung
  3. Bereichsfehler
  4. ReferenzFehler
  5. Syntaxfehler
  6. TypFehler
  7. URIError

werfen

Einige JavaScript-Codes enthalten keine syntaktischen Fehler, aber logische Fehler. Bei solchen Fehlern löst JavaScript keine Ausnahme aus. Zu diesem Zeitpunkt können wir selbst eine Instanz des Fehlerobjekts definieren und die throw-Anweisung verwenden, um aktiv eine Ausnahme auszulösen. Im Programm können wir mit der throw-Anweisung gezielt Ausnahmen werfen. Die Syntax lautet wie folgt:

throw new Error("Fehleranweisungen")

versuchen…fangen…endlich

  • Probieren Sie Code aus, bei dem Ausnahmen auftreten können
  • catch(error) Code, der ausgeführt wird, wenn ein Fehler auftritt
  • schließlich Code, der ausgeführt wird, egal was

Es gibt drei Formen von Try-Anweisungen:

  • versuche...fang
  • versuche...endlich
  • versuchen...fangen...endlich

Die Finally-Regel

Wenn im Finally-Block eine Ausnahme ausgelöst wird, wird die Ausnahme im Try-Block überschrieben.

versuchen {
    versuchen {
        neuen Fehler ausgeben (,,kann es nicht finden1‘);
    Endlich
        neuen Fehler ausgeben (,,kann es nicht finden2‘);
    }
} fangen (Fehler) {
    console.log(Fehlermeldung);
}

// kann es nicht finden2

Wenn Sie einen Wert aus dem Finally-Block zurückgeben, wird dieser Wert zum Rückgabewert des gesamten Try-Catch-Finally, unabhängig davon, ob im Try- und Catch-Block Return-Anweisungen enthalten sind. Hierzu zählen auch in Catch-Blöcken ausgelöste Ausnahmen.

Funktion test() {
    versuchen {
        neuen Fehler ausgeben (,,kann es nicht finden1‘);
        Rückgabe 1;
    } fangen (Fehler) {
        neuen Fehler ausgeben (,,kann es nicht finden2‘);
        Rückgabe 2;
    Endlich
        Rückgabe 3;
    }
}

konsole.log(test()); // 3

Try/Catch-Leistung

Ein bekanntes Anti-Optimierungsmuster ist die Verwendung von try/catch

In V8 (und möglicherweise anderen JS-Engines) können Funktionen, die Try/Catch-Anweisungen verwenden, nicht vom V8-Compiler optimiert werden.

Fenster.beiFehler

Durch die Definition einer Ereignis-Listener-Funktion für window.onerror werden nicht abgefangene Ausnahmen, die von anderem Code im Programm generiert werden, häufig von der für window.onerror registrierten Listener-Funktion abgefangen.

window.onerror = function (Nachricht, Quelle, Zeilennummer, Spaltennummer, Fehler) { }

  • Nachricht: Ausnahmeinformationen (Zeichenfolge)
  • Quelle: URL des Skripts, in dem die Ausnahme aufgetreten ist (Zeichenfolge)
  • lineno: Die Zeilennummer, in der die Ausnahme aufgetreten ist (eine Zahl)
  • colno: Die Spaltennummer, in der die Ausnahme aufgetreten ist (Nummer)
  • Fehler: Fehlerobjekt (Objekt)

Ausnahmen in Promises

Ausnahme in Promise ausgelöst

  • neues Versprechen((lösen, ablehnen)=>{ ablehnen(); })
  • Promise.resolve().then((auflösen,ablehnen)=>{ ablehnen(); });
  • Versprechen.ablehnen();
  • Ausdruck werfen;

Abfangen von Ausnahmen in Promise

  • promiseObj.then(undefined, (err)=>{ catch_statements });
  • promiseObj.catch((Ausnahme)=>{ catch_statements })

Beachten

In einer JavaScript-Funktion unterbricht nur return / yield / throw die Ausführung der Funktion, und reject verhindert die weitere Ausführung nicht.

Beispiel:

Ablehnen ohne Rückgabe

Versprechen.lösen()
.then(() => {
    console.log('vor der Ausführung ablehnen');
    ablehnen (neuer Fehler ('Fehler auslösen'));
    console.log('nach Ausführung ablehnen');
})
.catch((err) => {
    console.log(Fehlermeldung);
});

// vor der Ausführung ablehnen
// Fehler ausgeben
// nach der Ausführung ablehnen

Ablehnen mit Return

Versprechen.lösen()
.then(() => {
    console.log('vor der Ausführung ablehnen');
    Rückgabe ablehnen (neuer Fehler ('Fehler auslösen'));
    console.log('after execute reject'); //*** Der Unterschied besteht darin, dass, wenn return zurückgegeben wird, es hier nicht ausgeführt wird})
.catch((err) => {
    console.log(Fehlermeldung);
});

// vor der Ausführung ablehnen
// Fehler ausgeben

Vue-Ausnahmeerfassung

Vue.config.errorHandler = (err, vm, info) => {
  console.error("Fehler vom Vue ErrorHandler erfasst");
  Konsole.Fehler(Fehler);
  Konsole.Fehler(vm);
  konsole.fehler(info);
};

Zusammenfassen

Dies ist das Ende dieses Artikels über den Fehlerabfangmechanismus für JavaScript-Grundlagen. Weitere relevante Inhalte zum Fehlerabfangmechanismus von JS finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • So erfassen und melden Sie JS-Fehler mit window.onerror
  • Zusammenfassung einiger Dinge zur asynchronen Fehlererfassung in JS
  • Analyse der Verwendung des Try-Catch-Ausnahmeerfassungsmechanismus in Javascript
  • JS verwendet onerror, um Ausnahmen zu erfassen – Beispiel
  • Detaillierte Analyse von Ereignissen und Ausnahmeerfassung in JavaScript

<<:  Dynamische SQL-Anweisungsanalyse in Mybatis

>>:  Linux Überprüfen Sie den Installationsort der Software einfache Methode

Artikel empfehlen

So implementieren Sie geplante MySQL-Aufgaben zur Datensicherung unter Linux

Vorwort Backup ist die Grundlage der Notfallwiede...

So implementieren Sie ein Dropdown-Menü für die HTML-Eingabe

Code kopieren Der Code lautet wie folgt: <html...

CentOS7-Konfiguration Alibaba Cloud Yum-Quellmethodencode

Öffnen Sie den Centos Yum-Ordner Geben Sie den Be...

So unterstützen Sie ApacheBench mehrere URLs

Da der Standard-AB nur Stresstests für eine einze...

Zusammenfassung der gebräuchlichen Buchstaben in Unicode

Die meisten der ersten Computer konnten nur ASCII...

Vue3.0 verwendet das Plug-In vue-grid-layout, um Drag-Layout zu implementieren

Inhaltsverzeichnis 1. Plugins 2. Zwischenspiel 3....

Detaillierte Erklärung der MySQL-Datenbank-Trigger

Inhaltsverzeichnis 1 Einleitung 2 Trigger-Einführ...

MySQL Master-Slave-Prinzip und Konfigurationsdetails

MySQL Master-Slave-Konfiguration und Prinzip, zu ...