Ich möchte einen Dienst zum Aufrufen einer API haben, die eine Anforderung ordnungsgemäß verarbeitet und die Standardfehlerbehandlung für die API-Anforderungen durchführt. Zum Beispiel habe ich eine ApiErrorsService
, die ich aufrufen möchte, wenn ein API-Aufruf einen Fehler erhält. Ich möchte auch Aufrufe auf eine Standard-Weise senden, d. H. Den Inhaltstyp auf Anwendung/json setzen und das Anforderungsobjekt serialisieren.Zweimal bei Angular 2 Http abonnieren?
Natürlich, wenn ich die Observable abonnieren von Http
zurückgegeben wird es einmal aufgerufen, und wenn ich es zurück und der Anrufer abonniert es wird erneut aufgerufen. Was wäre der beste Weg, um die Ergebnisse an zwei Orten zu hören, ohne den API-Aufruf zweimal auszuführen? Kann ich einfach .publish()
oder .share()
anrufen und das zurückgeben? Muss ich es dann entsorgen? Gibt es Timing-Probleme, die auftreten können? Wenn ich den API-Aufruf verspotze und sofort einen Wert zurückgebe, wird das funktionieren, oder wird das Abonnement des Aufrufers die Werte verpassen? Hier ist der Code, den ich habe:
post(path: string, data: any): Observable<Response> {
var headers: Headers = new Headers();
headers.set("Content-Type", "application/json");
var s = data == null ? null : JSON.stringify(data, null, 2);
var shared = this.http.post(path, s, { headers: headers }).share();
shared.subscribe(null, err => this.appErrorsService.addApiError(err));
return shared;
}