2017-05-27 17 views
0

アプリケーションで不要なHTTPコールの数を制限しようとしていますが、Observableを購読するたびにリクエストがサーバーに送信されます。 httpリクエストを発行せずにobservableを購読する方法はありますか?サービスの私に観察は、以下のようになります。Angular4 Rxjs Observable LimitバックエンドHTTPリクエスト

getServices(): Observable<Service[]> { 
    return this.http.get(this.serviceUrl).map(res => res.json())._catch(err => err); 
} 

はその後、私のコンポーネントで私はこのようなことに観察を購読する:

this.serviceService.getServices().subscribe(services => this.services = services);

私が達成したいと思うパートナーはどのようなサービスに何とかデータを格納することです(私はアプリケーション全体でこのデータを使用することができるように、すべてのコンポーネントを別々にリクエストする必要はありませんが、通常、サブスクリプションでデータが受信されることを知りたいと思います)。

+0

...リクエストをトリガーする関数を呼び出さないでください。 <。<あなたがそれを実行したくなければ、なぜあなたはそれに加入しますか?意味がない。 – Chrillewoodz

+0

私はそれが提供するのと同じデータが必要なので、私はそれを購読しています...今は回避策を作成し、 "this.services"をサブジェクトの内部に置き、サブオブジェクトからオブザーバブルを作成しました。 –

+0

これは既によく説明されています。https://stackoverflow.com/documentation/rxjs/8247/common-recipes/26490/caching-http-responses#t=201705280824475411303 – martin

答えて

0

あなたの質問が正しく理解されているかどうかは不明ですが、最初のHTTP要求の結果をサービスにキャッシュしたいと思うので、最初のコンポーネントがデータをフェッチし、2番目のコンポーネント(別のサブスクライバ)がキャッシュされたデータ。その場合、モジュールレベルでサービスプロバイダを宣言して、Angularがシングルトンオブジェクトを作成するように宣言します。次に、サービス内で最初の取得後にデータを格納するvarを作成します。

@Injectable() 
export class DataService{ 

    mydata: Array<string>[]; 

    constructor(private http:Http){} 

    getServices(): Observable<string[]> { 
     if (this.mydata){ 
      return Observable.from(this.mydata); // return from cache 
     } else 
     { 
      return return this.http.get(this.serviceUrl).map(res => res.json())._catch(err => err); 
     } 
    } 
} 
関連する問題