2016-10-06 6 views
1

返されたObservableに変更を加えずに、返されたヘッダーを保存するAngular 2のHttpサービス用のラッパーサービスを作成しようとしています。基本的に、Angular 2 Httpメソッド(http.get())を呼び出し、Observableを返しますが、Observableに含まれるResponseオブジェクトは保存します。私の知る限り、返されるObservable(Responseオブジェクト)に含まれるオブジェクトは1つだけです。コードは、活字体で次のようになります。RXJSを使用して観察可能な単一の値を突然変異なしで抽出する

private headers: Headers; 

constructor(private http: Http) { } 

public get(url: string): Observable<Response> { 
    return this.http.get(url, this.headers); // save the Response's headers before returned 
} 

私はRXJSに新しいですが、私はまだ、観察を戻しながらレスポンスを抽出する方法を探しています。アドバイスは役に立ちますが、私は効率的でRXJSの良い習慣を使用するメソッドを好むでしょう。ありがとう。

答えて

2

あなたはそれを返す前にobservableオブジェクトを保持するために一時変数を使用することができます。

public get(url: string): Observable<Response> { 
    let obs = this.http.get(url, this.headers).share(); 
    obs.subscribe((response) => { 
     // do your stuff 
    }); 
    return obs; 
} 
+0

'シェア()'の目的は何ですか? –

+0

'http.get'はコールドオブザーバブルを返します(単純にputは' item'を積極的に発信していない 'observable'です。誰も' subscribe'していない場合、 'url'へのリクエストは発生しません)。しかし、あなたのサービスの 'get'関数と実際の' component'の中にサブスクライブしているもののように、1つのコールドオブザーバブルに複数の 'subscribe'があると、それに応じて複数のリクエストが発生します。それを避けるために 'share()'が採用されています。もっと読むここをクリック:http://blog.thoughtram.io/angular/2016/06/16/cold-vs-hot-observables.html –

関連する問題