rxjs根据条件返回缓存响应
我想创建一个从后端加载数据的observable。然而,我想告诉他真正地获取它或者从缓存中获取结果rxjs根据条件返回缓存响应,rxjs,Rxjs,我想创建一个从后端加载数据的observable。然而,我想告诉他真正地获取它或者从缓存中获取结果 backendData$ = http.get(...).pipe(shareReplay(1)); refresh$: Subject<{doBackendRequest: boolean}> = new Subject(); rowData$ = this.refresh$.pipe( tap(opts =&
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;
}
})
现在的问题是如何缓存http结果?我尝试使用
shareReplay(1)
,但找不到有效的解决方案。你能给我指一下方向吗?下面是一个如何实施的示例:
backendData$=http.get(…);
cachedData$=backendData$.pipe(shareReplay(1));
刷新$:主题=新主题();
rowData$=this.refresh$
.pipe(开关映射(刷新=>刷新?后端数据$:缓存数据$)
非常感谢。我现在遇到了一个新问题:当后端请求正在运行并且有人调用时。下一步({performBackendRequest:false}),由于SwitchMap,后端请求被取消。从技术上讲,这是正确的,对于我的用例,这是一个问题:)
this.refresh$.next({performBackendRequest: true});
this.refresh$.next({performBackendRequest: false});