首页 > 解决方案 > RxJs 管道在加载时保存数据,在加载时发出,在加载时允许发出

问题描述

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

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)

But there are an arbitrary number of data streams that need to be curbed by whether or not data is loaded, so I'd prefer a pipe that allows me to simply:

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

Any elegant solutions on how to do this?

标签: observablerxjs6

解决方案


我找到了一个可以解决这个问题的解决方案:

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

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


推荐阅读