Detaillierte Erklärung, wie Angular mit unerwarteten Ausnahmefehlern umgeht

Detaillierte Erklärung, wie Angular mit unerwarteten Ausnahmefehlern umgeht

Vorne geschrieben

Unabhängig davon, wie gut der Code geschrieben ist, ist es unmöglich, alle möglichen Ausnahmen vollständig zu behandeln. Dies gilt insbesondere für Anwendungen in Produktionsumgebungen, in denen ein großer Teil der Daten von Benutzern und Remotestandorten stammt und es schwierig ist, sicherzustellen, dass alle Daten wie vom Programm angegeben generiert werden. Tatsächlich gibt es keine Möglichkeit, davon zu erfahren, es sei denn, es wird von einem Tester entdeckt oder von einem Kunden gemeldet. Daher ist es sehr wichtig, die von der Anwendung generierten unbekannten Ausnahmen zu melden.

Angular bietet standardmäßig auch eine globale Ausnahmeverwaltung. Wenn eine Ausnahme auftritt, wird sie an die Konsole gesendet. Wenn Sie NG-ZORRO verwenden, werden Sie häufig auf Ausnahmemeldungen stoßen, dass ICON nicht geladen ist. Dies ist auch eine Art von Ausnahmemeldung:

core.js:5980 FEHLER Fehler: [@ant-design/icons-angular]:das Symbol „setting-o“ existiert nicht oder ist nicht registriert.
 bei IconNotFoundError (ant-design-icons-angular.js:94)
 bei MapSubscriber.project (ant-design-icons-angular.js:222)
 bei MapSubscriber._next (map.js:29)
 bei MapSubscriber.next (Subscriber.js:49)
 bei RefCountSubscriber._next (Subscriber.js:72)
 bei RefCountSubscriber.next (Subscriber.js:49)
 bei Subject.next (Subject.js:39)
 bei ConnectableSubscriber._next (Subscriber.js:72)
 bei ConnectableSubscriber.next (Subscriber.js:49)
 bei CatchSubscriber.notifyNext (innerSubscribe.js:42)

Angular verwaltet Ausnahmemeldungen einheitlich über ErrorHandler und Sie müssen nur die Methode handleError überschreiben und die Ausnahmemeldung erneut verarbeiten.

Fehlerhandler

Erstellen Sie zunächst eine Datei custom-error-handler.ts:

importiere { ErrorHandler, Injectable } von '@angular/core';

@Injizierbar()
exportiere Klasse CustomErrorHandler erweitert ErrorHandler {
 handleError(Fehler: beliebig): void {
 super.handleError(Fehler);
 }
}

CustomErrorHandler kann die aktuellen Benutzerdaten, das aktuelle Ausnahmemeldungsobjekt usw. vollständig abrufen und die Berichterstellung an das Backend über HttpClient ermöglichen.

Nachfolgend finden Sie die Dokumentationsseite von NG-ALAIN. Da zur Analyse Google Analytics verwendet wird, müssen wir die Ausnahmemeldung nur an onerror weiterleiten:

importiere { DOKUMENT } von '@angular/common';
importiere { ErrorHandler, Inject, Injectable } von '@angular/core';

@Injizierbar()
exportiere Klasse CustomErrorHandler erweitert ErrorHandler {
 Konstruktor(@Inject(DOKUMENT) privates Dokument: beliebig) {
 super();
 }

 handleError(Fehler: beliebig): void {
 versuchen {
  super.handleError(Fehler);
 } fangen (e) {
  dies.reportError(e);
 }
 dies.reportError(Fehler);
 }

 privater Fehlerbericht(Fehler: Zeichenfolge | Fehler): void {
 const win = this.doc.defaultView als beliebig;
 wenn (gewinnen && gewinnen.beiFehler) {
  wenn (Fehlertyp === 'Zeichenfolge') {
  win.onerror(Fehler);
  } anders {
  win.onerror(Fehlernachricht, undefiniert, undefiniert, undefiniert, Fehler);
  }
 }
 }
}

Registrieren Sie abschließend den CustomErrorHandler im AppModule:

@NgModule({
 Anbieter:
  { bereitstellen: ErrorHandler, verwendenKlasse: CustomErrorHandler },
 ]
})
exportiere Klasse AppModule { }

abschließend

Tatsächlich gibt es noch eine weitere sehr wichtige Aufgabe. Die Dateien in der Produktionsumgebung werden verpackt und komprimiert. Mit anderen Worten, die generierte Ausnahmemeldung kann nicht mit der tatsächlichen Anzahl der Codezeilen übereinstimmen. Dies erfordert die Unterstützung von SourceMap. Natürlich wird die normale Produktionsumgebung diese Datei nicht veröffentlichen. Wenn Sie also die richtige Anzahl von Zeilen und Spalten erhalten möchten, müssen Sie dennoch eine Zwischenebene verwenden und das Source-Map-Modul im Backend verwenden, um die tatsächlichen Zeilen- und Spaltenwerte zu analysieren.

Mithilfe des Dependency-Injection-Systems (DI) von Angular können wir einige in Angular integrierte Module schnell ersetzen und so einige spezielle Anforderungen schnell lösen, ohne die Geschäftsebene zu ändern.

Zusammenfassen

Dies ist das Ende dieses Artikels darüber, wie Angular unerwartete Ausnahmefehler behandelt. Weitere Informationen dazu, wie Angular unerwartete Ausnahmefehler behandelt, finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • Verwenden von Raygun zum automatischen Verfolgen von Ausnahmen in AngularJS

<<:  React-native-Beispielcode zur Implementierung des Schiebelöscheffekts des Einkaufswagens

>>:  Detaillierte Erläuterung der Wissenspunkte zur asynchronen Programmierung in nodejs

Artikel empfehlen

Beispiel für ein WeChat-Applet zum Erzielen des rotierenden Laterneneffekts

Vorwort In der täglichen Entwicklung stoßen wir h...

Detaillierte Erläuterung des Watch-Listener-Beispiels in vue3.0

Inhaltsverzeichnis Vorwort Der Unterschied zwisch...

So schreiben Sie eleganten JS-Code

Inhaltsverzeichnis Variable Verwenden Sie aussage...

Codebeispiel für die Linux-SSH-Serverkonfiguration

Verwenden Sie den folgenden Terminalbefehl, um de...

Beispiele für die Verwendung von HTML-Marquee-Tags

Dieses Tag ist nicht Teil von HTML3.2 und unterstü...

Vue implementiert den Lupeneffekt beim Tab-Umschalten

In diesem Artikelbeispiel wird der spezifische Co...

Javascript zum Erzielen eines Trommeleffekts

In diesem Artikel wird der spezifische Code von J...

Ein MySQL-Migrationsplan und eine praktische Auflistung der Fallstricke

Inhaltsverzeichnis Hintergrund Lösung 1: Alte Dat...

So installieren und konfigurieren Sie Redis in CentOS7

Einführung Es ist nicht nötig, Redis im Detail vo...

js, um einen einfachen Drag-Effekt zu erzielen

In diesem Artikel wird der spezifische Code von j...

So verwenden Sie das VS2022-Remote-Debugging-Tool

Manchmal müssen Sie bei der Arbeit ein Remote-Deb...