如何解决rxjs根据条件返回缓存的响应
我想创建一个从后端加载数据的可观察对象。但是,我想告诉他真正获取它或从缓存中获取结果。
backendData$ = http.get(...).pipe(shareReplay(1));
refresh$: Subject<{doBackendRequest: boolean}> = new Subject();
rowData$ = this.refresh$.pipe(
tap(opts => console.log(opts.doBackendRequest)),switchMap(() => {
if (opts.doBackendRequest) {
// lets do a new request
return backendData$;
} else {
// somehow return cached results
return CACHED_DATA;
}
})
rowData$
由异步管道rowData$ | async
订阅
这是我想如何称呼它:
this.refresh$.next({performBackendRequest: true});
this.refresh$.next({performBackendRequest: false});
现在的问题是如何缓存http结果?我尝试使用shareReplay(1)
,但找不到有效的解决方案。你能指出我的方向吗?
解决方法
下面是如何实现的示例:
backendData$ = http.get(...);
cachedData$ = backendData$.pipe(shareReplay(1));
refresh$: Subject<boolean> = new Subject();
rowData$ = this.refresh$
.pipe(switchMap(refresh => refresh ? backendData$ : cachedData$))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。