如何使用标准方法清理rxjs缓存

时间:2018-12-12 22:08:16

标签: angular typescript angular6

我有一个正在从服务器缓存数据的服务。但是我需要在getView()的最后一次调用之后每10秒清除一次缓存。

import {shareReplay} from 'rxjs/operators';


cache$: Observable<any>;
getView() {
  if (!this.organizationViewCache$) {
    this.cache$ = this.baseApiDependenciesService.http.post(
      `my-api`, {}, this.getHeaders()
    ).pipe(
      shareReplay(1),
      catchError(this.handleError)
    );
  }
  return this.organizationViewCache$;
}

也许const timer$ = timer(0, 10000);的{​​{1}}很不错,但我不知道该怎么做:

  1. 连接{timer} from 'rxjs/observable/timer';timer.pipe(),是因为shareReplay(1)已经在shareReplay(1)内部吗?
  2. 在最后一次调用http.post.pipe方法之后的10秒钟内,<10>不是每10秒钟不是清洁缓存。 (如果可能,但不是很强要求)

更新

我找到了具有类似行为的解决方案,但是我需要使用getView()工具来做同样的事情:

RX/JS

2 个答案:

答案 0 :(得分:1)

可能是类似的东西吗?

.pipe(
   switchMap(timer$),
   tap(()=>cached$=null)
) 

因此,想法是,如果再次调用服务,则内部时间$将被取消,并且将从头开始创建新的时间。但是我不确定这是否是您想要的实际行为。

答案 1 :(得分:1)

如果您的意思是,您想每10秒调用一次 getView()

您可以从rxjs使用 Interval ,有关documentation

interval(10000).pipe( 
  tap(x => this.cache$ = null)
).subscribe();

间隔将执行,this.cache $为空,每10秒一次。