Angular2& RxJS - 缓存带参数的服务

时间:2017-04-13 11:26:10

标签: angular caching rxjs

我试图将缓存添加到Angular2 HTTP服务中,但似乎无法弄明白。

我关注了其他帖子,让它完美地适用于不接受任何参数的HTTP服务,例如

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

但是,当我引入一个应该与请求一起发送的teamId参数时,我在尝试弄清楚我是否能够完成上述工作时迷失了。

理想情况下,如果在过去的X秒内使用了相同的teamId,则只需从缓存中读取,如果新的teamId或3秒已经过去,则调用该服务。

任何帮助都会很棒。

谢谢, 凯文。

1 个答案:

答案 0 :(得分:3)

您可以使用Map来维护teamID /团队关联(我没有触及Observable创建部分):

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);
}