observable - 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?
解决方案
我找到了一个可以解决这个问题的解决方案:
dataLoaded = (): UnaryFunction<Observable<T>, Observable<T>> =>
pipe(
switchMap(val =>
dataLoaded$.pipe(
filter(Boolean),
mapTo(val)
)
)
)
虽然我非常感谢反馈为什么这可能不是我想要的(据我所知似乎工作正常)
推荐阅读
- php - 通过 array_push 计算行数
- python - Python文件使用OpenCV写入所有边界框坐标
- python - 带有4个表的Python sql
- ios - 我应该为通知服务扩展和通知内容扩展创建单独的 apns 证书吗?
- c# - 无法从通用列表中获取值
- html - 如何在 IE11 上显示 HOVER 属性
- java - 将 JNI -> jobject(基本上是映射和/或 java 文件中的映射)转换为 std::map(c++)
- codeigniter - 部分数据已经输出,无法在codeigniter中发送PDF文件
- mysql - 如何使用 if else 语句修复 mysql 触发器?
- c - 试图覆盖 'fopen()' 但 GCC 给出“错误:'fopen' 的类型冲突”