すべてのhttp呼び出しに対して、次のラッパークラスを開発しました。私はちょうど例にget関数を含めました。Angular4 - 中央エラーすべてのhttpリクエストのログと処理
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;
}
}
これはうまくいきます。私は
this.httpClientService.get<StoredAppData[]>(this.configService.urls.fetchSettings, params)
.map((response) => {
this.storedAppData = response.json();
console.log(this.storedAppData);
return this.storedAppData;
});
を次のようにカスタムサービスから入手呼び出すしようとすると、それはTS2339をスロー:プロパティ「マップ」「タイプにSubscription'error存在しません。 Observableを既に購読していて、.subscribe()を取り除いて関数を返すだけでうまくいくことは分かります。しかし、私は単一のレイヤーで中央エラー処理を実装することはできません。それを行う良い方法は何でしょうか?
公共取得(URL:文字列、httpParams:アレイ<地図<文字列、文字列>>){ VAR応答= this.httpClient に.get (URL、{のparams:this.appendHttpParams( httpParams)、ヘッダー:this.httpHeaders}); response.subscribe(data => { }、 err => { }); リターンレスポンス。 } –
lohiarahul
上記の方法よりも洗練された方法になりました。 – lohiarahul
'' import 'rxjs/add/observable/map'; ''この行を '' map''に関するエラーを取り除くだけです。 –