RxJs 管道在加载时保存数据,在加载时发出,在加载时允许发出

RxJs pipe that holds data when loading, emits on load, allows emit when loaded

我有两个管道,一个用作图表的数据,另一个用作数据加载指示器

graphData$: Observable<GraphData>;
dataLoaded$: Observable<boolean>;

我需要以下管道:graphData$ 排放需要在 dataLoaded$ 排放 false 时停止。当 dataLoaded$false 切换到 true 时,我希望最后停止的 graphData$ 发射通过管道发射。当 graphData$ 发出时 true 我想简单地绕过管道。

现在我用以下方式解决它:

combineLatest([
  graphData$,
  dataLoaded$
]).pipe(
    filter(([_, dataLoaded]) => dataLoaded),
    map(([graphData]) => graphData)
).subscribe(graphData => blabla)

但是有任意数量的数据流需要根据是否加载数据来限制,所以我更喜欢一个允许我简单地进行操作的管道:

graphData$.pipe(
  dataLoaded()
).subscribe(graphData => blabla)

关于如何做到这一点的任何优雅的解决方案?

我找到了一个可能解决此问题的解决方案:

dataLoaded = (): UnaryFunction<Observable<T>, Observable<T>> => 
  pipe(
    switchMap(val => 
      dataLoaded$.pipe(
        filter(Boolean),
        mapTo(val)
      )
    )
  )

虽然我非常感谢反馈为什么这可能不是我想要的(尽管据我所知似乎工作正常)