将可观察数组的可观察值转换为可观察数组的值

时间:2019-07-15 08:47:45

标签: javascript typescript rxjs observable

我正在尝试查询数据库。遍历结果列表,并为每个项目执行另一个请求。在rxjs构建结束时,我有geom。但是我需要拥有Observable<Observable<Timesheet>[]>。该怎么做?

Observable<Timesheet[]>

2 个答案:

答案 0 :(得分:1)

您需要forkJoin单独的请求并将mergeMap合并到源:

const loadElapsedCase: Observable<TimesheetEnt[]> = getElapsedCase().pipe(
  mergeMap(elapsedCases => elapsedCases.map(elapsedCase => {
    return forkJoin(findOneById().pipe(
      map(loadedCase => {
        return {
          id: elapsedCase.id,
          title: elapsedCase.title,
          case: loadedCase
        };
      }))
    );
  }))
);

答案 1 :(得分:0)

使用mergeMap + forkJoinmergeMap将多个Observable发出的值合并为一个Observable。 forkJoin允许您等待Observable列表的结果,并将所有这些Observable的结果合并为一个列表(与Promise.all相比)。 请参阅:https://rxmarbles.com/#mergeMaphttps://rxmarbles.com/#forkJoin

多亏了ritaj的答案,我知道它应该是forkJoin。这有效:

const loadElapsedCase: Observable<TimesheetEnt[]> = getElapsedCase().pipe(
  mergeMap(elapsedCases => 
    forkJoin(
      elapsedCases.map(elapsedCase => {
        return findOneById().pipe(
          map(loadedCase => {
            return {
              id: elapsedCase.id,
              title: elapsedCase.title,
              case: loadedCase
            };
          })
        );
      })
    )
  )
);

在StackBlitz中:https://stackblitz.com/edit/rxjs-zidltc?file=index.ts