rxjs - rxjs - 过滤后组合内部可观察对象
问题描述
我调用后端响应:
[
"https://some-url.com/someData1.json",
"https://some-url.com/someData2.json"
]
每个 JSON 可以有以下模式:
{
"isValid": boolean,
"data": string
}
我想获取包含所有数据的数组,将 isValid 设置为 true
backend.get(url)
.pipe(
mergeMap((urls: []) =>
urls.map((url: string) =>
backend.get(url)
.pipe(
filter(response => response.isValid),
map(response => response.data)
)
)
),
combineAll()
)
当两个 .json 都将“isValid”设置为 true 时,我会得到包含两个数据的数组。但是,当其中一个将“isValid”设置为 false 时,可观察到的永远不会完成。
我可以使用 mergeAll 而不是 combineAll,但随后我收到单个数据流而不是所有数据的集合。
有没有更好的方法来过滤掉可观察的?
解决方案
正如您所说,内部可观察对象永远不会发出,因为filter
不会转发可观察对象发出的唯一值backend.get
。在这种情况下,订阅该 observable 的操作员 - 在您的情况下combineAll
- 也将永远不会收到任何值,也永远不会发出自己。
我要做的只是combineAll
通过提供一个项目功能来移动过滤和映射,如下所示:
backend.get(url)
.pipe(
mergeMap((urls: string[]) =>
urls.map((url: string) => backend.get(url))
),
combineAll(responses =>
responses
.filter(response => response.isValid)
.map(response => response.data)
)
)
看看这是否适合你;)
推荐阅读
- css - 如何从 Templated.co 免费模板调整 Poptrox 弹出图像大小
- sqlalchemy - mysql表不匹配sqlalchemy模型会导致错误吗?
- swift - 架构 x86_64 的 48 个重复符号错误
- node.js - 如何用passport.js和express实现条件认证?
- sql - 计算 SQL 表中的填充列数
- java - 将 Springboot WAR 部署到 Tomcat 8.5 显示空白页面
- mysql - 上一行减去当前行的值
- c# - 如何使用指向字节数组的指针(字节*)写入文件
- apache-kafka - HW 和 LEO 存储在 Kafka 的什么位置
- python - 规范化数组中的所有其他元素