首页 > 解决方案 > 角度嵌套的 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)))));

标签: angularrxjs

解决方案


灵感来自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
  })

推荐阅读