我有一个正在从服务器缓存数据的服务。但是我需要在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}}很不错,但我不知道该怎么做:
{timer} from 'rxjs/observable/timer';
和timer.pipe()
,是因为shareReplay(1)
已经在shareReplay(1)
内部吗?http.post.pipe
方法之后的10秒钟内,<10>不是每10秒钟不是清洁缓存。 (如果可能,但不是很强要求)
更新
我找到了具有类似行为的解决方案,但是我需要使用getView()
工具来做同样的事情:
RX/JS
答案 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秒一次。