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

Das vergessene Button-Tag

Hinweis: Dieser Artikel wurde von jemand anderem ü...

So zeigen Sie Bilder im TIF-Format im Browser an

Der Browser zeigt Bilder im TIF-Format an Code kop...

Versprechenskapselung wx.request-Methode

Im vorherigen Artikel wurde die Implementierungsm...

Unterschied zwischen HTML ReadOnly und Enabled

Das Textfeld mit dem ReadOnly-Attribut wird auf de...

So verstehen Sie den Unterschied zwischen ref toRef und toRefs in Vue3

Inhaltsverzeichnis 1. Grundlagen 1.Referenz 2. to...

Drei Diskussionen zum Iframe Adaptive Height Code

Beim Erstellen einer B/S-Systemschnittstelle stößt...

Vue+Vant implementiert die obere Suchleiste

In diesem Artikelbeispiel wird der spezifische Co...

Detaillierte Erklärung der HTML-Formularelemente (Teil 2)

HTML-Eingabeattribute Das Value-Attribut Das Valu...

Wie die MySQL Select-Anweisung ausgeführt wird

Wie wird die MySQL-Select-Anweisung ausgeführt? I...

Starten Sie alle gestoppten Docker-Container mit einem Befehl neu

Starten Sie alle gestoppten Docker-Container mit ...

Wie oft werden mehrere setStates in React aufgerufen?

Inhaltsverzeichnis 1. Zwei setState, wie oft soll...