我正在尝试查询数据库。遍历结果列表,并为每个项目执行另一个请求。在rxjs构建结束时,我有geom
。但是我需要拥有Observable<Observable<Timesheet>[]>
。该怎么做?
Observable<Timesheet[]>
答案 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
+ forkJoin
! mergeMap
将多个Observable发出的值合并为一个Observable。
forkJoin
允许您等待Observable列表的结果,并将所有这些Observable的结果合并为一个列表(与Promise.all相比)。
请参阅:https://rxmarbles.com/#mergeMap和https://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