2017-10-03 3 views
2
import {NgModule, ErrorHandler} from '@angular/core'; 

class MyErrorHandler implements ErrorHandler { 
    handleError(error:any) { 
    // do something with the exception 
    console.log('Error',error); 
    } 
} 

Ich verwende den ErrorHandler, um die erzeugten Ausnahmen abzufangen. Der aufgefangene Fehler ist vom Typ ERROR, aber hier ist der Klassenfehler vom Typ error:any, aufgrund dessen console.log ('Error', error); druckt Error Uncaught (in promise): [object Object] als der Typ des Fehlerobjekts ist any.Wie kann der Fehler vom Typ any in den Fehler vom Typ Error geändert werden?

Wie kann ich das Fehlerobjekt in handleError(error:any) in ERROR ändern?

Antwort

0

Typescript prüft die Laufzeit nicht. Und da ein Error IS any (any bedeutet nur "beliebiges Objekt"), ist der Aufruf handleError(error: any) mit einem Error Objekt perfekt gültig.

Es ist ein bisschen wie "Opt-out" der Typ-Überprüfung während der Übertragung in Javascript.

Also, wenn Sie sagen: "druckt Fehler uncaught (in Versprechen): [Object Object] als die Art der Fehler Objekt ist any.", Chancen sind die "jeder" Typ ist tatsächlich ein Fehler. Wenn Sie ein Objekt auf der Konsole ausdrucken, sieht es immer wie [object Object] aus (es sei denn, Ihre Konsole verfügt über ein gutes Parsing wie die Chrome-Konsole, auf der ein interaktives Objekt angezeigt wird). Wenn Sie die JSON wollen: tun error.toJSON() und Sie werden alle Felder im Fehlerobjekt sehen und in der Lage zu sagen, ob es tatsächlich eine Error ist.

Ich vermute, Sie etwas entlang der Linien von tun:

console.log('Error', error.message); 

Ich weiß nicht, welche Felder Fehler der Spitze von meinem Kopf hat ab. Wenn Sie auch nicht tun, können Sie den as Befehl verwenden, um die Dinge einfach, wenn Sie Code schreiben:

handleError(e: any) { 
    // do something with the exception 
    const error as Error; 
    console.log('Error', error.message); 
} 

natürlich, dass brechen würde, wenn jemand es auf einem nicht Error-Objekt verwendet (oder ein Objekt das hat kein message, so ist es wahrscheinlich am besten, einen Scheck zu machen:

handleError(e: any) { 
    // do something with the exception 
    const error as Error; 
    if (error.message) { 
     console.log('Error', error.message); 
    } else { 
    console.log('Unspecified error!'); 
    } 
} 
Verwandte Themen