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)
)
)
)
虽然我非常感谢反馈为什么这可能不是我想要的(尽管据我所知似乎工作正常)
我有两个管道,一个用作图表的数据,另一个用作数据加载指示器
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)
)
)
)
虽然我非常感谢反馈为什么这可能不是我想要的(尽管据我所知似乎工作正常)