2017-04-13 2 views
2

私はAngular2 HTTPサービスにキャッシュを追加しようとしていますが、それを理解できないようです。Angular2&RxJS - パラメータをとるサービスをキャッシュする

私は他の投稿に続き、パラメータを一切使用しないHTTPサービスについては完全に機能しています。

workSummaries = this.http.get('http://locahost:8080/teams') 
      .map((response: Response) => response.json()) 
      .publishReplay(1, 3000) 
      .refCount() 
      .take(1); 

しかし、リクエストとともに送信する必要があるteamIdパラメータを導入すると、上記の作業を行うことができます。

理想的には、同じteamIdが最後のX秒間に使用された場合、キャッシュから読み込みます。それ以外の場合は新しいチームIDであるか、3秒間経過してからサービスを呼び出します。

助けがあれば助かります。

ありがとう、 ケビン。あなたは(私が観測作成部には触れませんでした)teamID /チームの関連付けを維持するために地図を使用することができます

+0

'地図を使用<数を、観察可能>' – n00dl3

+0

はいませんでしたそれを考えましたが、それはいい考えのようです。あなたは、これがどのように見えるかを大まかに示すためにいくつかの行を一緒にハックすることができるほど親切になるでしょうか?私はJSが最高ではないようにJavaの背景から来ています! – kevfuzz

答えて

3

summaries = new Map < number, Observable <Team>>(); 

getTeam(id: number) { 
    if (!this.summaries.get(id)) { 
    let team = this.http.get('http://locahost:8080/teams/' + id) 
     .map((response: Response) => response.json()) 
     .publishReplay(1, 3000) 
     .refCount() 
     .take(1); 
    this.summaries.set(id, team) 
    } 
    return this.summaries.get(id); 
} 
+0

ありがとうnoodl3。それは素晴らしい仕事だと思う。 – kevfuzz

関連する問題