angular - 角度嵌套的 Observable
问题描述
我的服务中有一个函数,它返回一个可观察的实体 id 数组,我还有另一个函数,它接受一个实体 id,通过它我可以将实体的详细信息作为可观察对象。
现在我想用第一个函数请求所有实体 id,然后将这些 id 一个一个地传送到第二个函数中,以获得一个包含我所有详细实体信息的大可观察对象。
只是谈谈相同的功能:
this.api.getEntities() -> gets all entity ids
this.api.getEntity(id) -> gets information of a single entity
这是我迄今为止尝试过的,但它只是在只有一个实体且两个或多个实体 id = 1、2 时使用。
this.entities$ = this.api.getEntities().pipe(switchMap(id => this.api.getEntity(id)));
我现在的工作解决方案是:
this.entities$ = this.api.getEntities().pipe(switchMap(ids => forkJoin(ids.map(id => this.api.getEntity(id)))));
解决方案
灵感来自Observable to Array 的 RxJs Array
return this.api.getEntities()
.pipe(
flatMap((ids: Array<number>) => {
return Observable.forkJoin(
ids.map((id: number) => this.api.getEntity(id))
);
})
)
.subscribe((entities: Array<Entity>) => {
// Do something
})
推荐阅读
- angular - Ag-grid 禁用特定行中的按钮
- javascript - React-Redux:带有参数的 PATCH
- firebase - Github Actions Firebase 错误“命令需要范围”
- c - 访问结构问题中指针分配的数据
- javascript - 如何将多个 Facebook API 请求合二为一?
- typescript - 如何使用 dynamodb-data-mapper 在一个查询中更新属性?
- reactjs - 使用样式化组件时出现 PropTypes 错误
- keras - 如何为地标本地化执行数据增强?
- python - 使用 BeautifulSoup 将 HTML 插入 html 文件
- c# - Blazor EditForm 和 Fluent 验证