在Angular中按唯一ID进行缓存

时间:2019-08-17 18:35:25

标签: angular caching rxjs

我想在Angular中实现缓存。我有两种方法GetAll()和GetById(id:number,如下所示。

对于GetAll(),我实现了Cache,并且工作正常。这是实现

private cache$: Observable<any>;
getAll() {
  if (!this.cache$) {
     this.cache$ = this.getAll().pipe(
     shareReplay(1)
   );
 }
 return this.cache$; 
}

现在,我想基于缓存实现,并且我有很多ID。如何根据ID进行缓存。

getById(id: number) {
if (!this.cache$) {
  this.cache$ = this.getById(id).pipe(
    shareReplay(1)
  );
}
return this.cache$;

}

很显然,我不想基于Id预先创建cache $。

我该怎么做呢?

1 个答案:

答案 0 :(得分:1)

您可以创建一个词典,以按ID保留所有缓存的可观察对象:

cacheMap = {}

getById(id: number) {
  if (!this.cacheMap[id]) {
    this.cacheMap[id] = ...
  }

  return this.cacheMap[id];
}