In meinem Angular 2 app habe ich einen Entschluß Wache, die eine xhr versucht und einen benutzerdefinierten Fehler auslöst, wenn es fehlschlägt:Wie man einen ZoneAwareError "auspackt"?
return this.service.getProduct (id)
.catch (err => Observable.throw(new MyError(err.message, route, 500, err)));
MyError
ist nur eine Erweiterung von Error
:
export class MyError extends Error {
constructor(message, routeSnapshot, code, err) {
super(message);
this.name = 'MyError';
this.routeSnapshot = routeSnapshot;
this.code = code;
this.err = err;
}
}
Mein globalen Fehler Handler empfängt eine Instanz von ZoneAwareError
anstelle von MyError
:
export class MyErrorHandler implements ErrorHandler {
handleError(error) {
console.log('handling err', error);
// this prints a ZoneAwareError on the console
}
}
Soll error
wirklich in ZoneAwareError
verpackt werden? Wie entpacke ich es, um MyError
zurück zu bekommen? Ist es sicher, sich auf die error.rejection
Eigenschaft zu verlassen? (Da kann ich MyError
dort sehen).
=== Edit:
Ok, ich habe gerade herausgefunden, dass Angular hüllt Fehler in verschiedenen Untertypen von Error
, nicht nur ZoneAwareError
. Bisher habe ich diese Funktion sie auszupacken, aber es fühlt sich ein bisschen hacky:
function unwrap (err) {
let res = err.rejection ? err.rejection : err;
while (res.originalError) {
res = res.originalError;
}
res.name = res.name || 'unknown';
return res;
}