Ich habe die folgende Wrapper-Klasse für alle meine http-Aufrufe entwickelt. Ich habe gerade die Get-Funktion im BeispielAngular4 - Zentraler Fehler Protokollierung und Behandlung aller HTTP-Anfragen
import { Injectable } from '@angular/core';
import { HttpClient, HttpParams, HttpResponse, HttpHeaders } from '@angular/common/http';
import { Observable } from 'rxjs';
/**
* Wrapper around the Http provider to allow customizing HTTP requests
*/
@Injectable()
export class HttpClientService {
private httpParams: HttpParams;
private httpHeaders: HttpHeaders;
constructor(
private httpClient: HttpClient,
private sharedService: SharedService) {
this.httpParams = new HttpParams();
this.httpHeaders = new HttpHeaders({ 'Access-Control-Allow-Origin': '*' });
}
public get<T>(url: string, httpParams: Array<Map<string, string>>) {
return this.httpClient
.get<T>(url, { params: this.appendHttpParams(httpParams), headers: this.httpHeaders })
.subscribe(data => {
console.log(data);
},
err => {
console.log(err);
});
}
private appendHttpParams(paramArray: Array<Map<string, string>>): HttpParams {
paramArray.forEach((value: Map<string, string>, index: number, array: Array<Map<string, string>>) => {
this.httpParams.append(value.keys[index], value.values[index]);
});
return this.httpParams;
}
}
Dies funktioniert gut. Aber wenn ich versuche, die get aus einem benutzerdefinierten Dienst zu nennen, wie
folgtthis.httpClientService.get<StoredAppData[]>(this.configService.urls.fetchSettings, params)
.map((response) => {
this.storedAppData = response.json();
console.log(this.storedAppData);
return this.storedAppData;
});
Es wirft einen TS2339: Anwesen ‚Karte‘ existiert nicht auf Typ ‚Subscription'error. Ich verstehe, dass ich das Observable bereits abonniert habe und gut funktionieren würde, wenn ich das .subscribe() loswerde und die Funktion einfach zurückgebe. Allerdings kann ich dann keine zentrale Fehlerbehandlung auf einer einzelnen Ebene implementieren. Was könnte ein guter Weg sein, es zu tun?
Öffentlichkeit bekommen (url: String, httpParams: Array >) { var response = this.httpClient .get (url, {params: this.appendHttpParams (httpParams), Header: this.httpHeaders}); response.subscribe (Daten => { }, err => { }); Antwort zurücksenden; } –
lohiarahul
Muss eine elegantere Methode als die oben genannten sein. – lohiarahul
fügen Sie einfach diese Zeile 'import 'rxjs/add/observable/map';' hinzu, um Fehler über 'map' zu entfernen. –