In einer angularen (4.3.6) Anwendung beobachte ich Observable in der Template mit Async-Pipe.Wie fange ich Exceptions für Observables ab, die in Angular template subskribiert wurden?
In einigen Fällen, wenn ich einen 404 von einem HTTP GET bekomme, wird die Ausnahme von Angular durchgebrannt und die Anwendung reagiert nicht mehr. Ich habe gesehen, dass ich die .catch()
Methode in meinem Dienst verwenden konnte, aber nicht direkt eine .subscribe() -Methode in meiner Komponente, wie kann ich mit der Ausnahme umgehen?
Document:
public getDocument() {
return this.getDocument(serverUrl).catch((err) => this.handleError(err));
}
private handleError(error: Response) {
return Observable.throw(error);
}
Komponente:
public ngOnInit() {
const document$ = this.reference$
.filter((i) => !!i)
.combineLatest(this.documentService.getBranch(),
(r: any, branch: string) => {
return this.documentService.getDocument(r.Id, r.targetId, this.GetHeadBranch(branch));
}).switch();
}
Vorlage:
<div *ngIf="document$|async; let document;">
....
</div>
Ist t hier eine Best Practice, um eine Ausnahme mit Observablen wie in meinem Fall zu bekommen?
Schade, dass es mit Ausnahmen für den Umgang noch kein besserer Ansatz ist. Die benutzerdefinierte Pipe erfordert einige zusätzliche Schritte (abonnieren Sie die Observable, behandeln Sie den Wert, Umleitung im Falle einer Ausnahme), aber wenn es generisch gemacht werden kann, wird es auf lange Sicht ein Gewinn sein. – Francesco