rxjs根据条件返回缓存响应

rxjs根据条件返回缓存响应,rxjs,Rxjs,我想创建一个从后端加载数据的observable。然而,我想告诉他真正地获取它或者从缓存中获取结果 backendData$ = http.get(...).pipe(shareReplay(1)); refresh$: Subject<{doBackendRequest: boolean}> = new Subject(); rowData$ = this.refresh$.pipe( tap(opts =&

我想创建一个从后端加载数据的observable。然而,我想告诉他真正地获取它或者从缓存中获取结果

  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});