我有以下设置:
let result = service.getResults();
result.data.forEach((row:any) => {
this.myService
.getObject(row.id)
.subscribe((object:any) => {
//...
})
);
}
在getObject(row.id)
的所有订阅完成后,我想做些事情。我知道有add()
函数,但是它将对每个Subscription都执行。来自Promises,我将每个Promise存储在一个数组中,然后命名为Promise.all()。
答案 0 :(得分:4)
在完成对getObject(row.id)的所有订阅后,我想做些事情。
最好使用forkJoin作为示例。来自官方文档:
forkJoin将等待所有传递的Observable完成,然后它将发出一个数组,其中包含来自相应Observable的最后一个值。
尝试通过这种方式做到:
import { forkJoin } from 'rxjs';
const rowObjects$ = result.data.map(rd => this.myService.getObject(rd.id));
forkJoin(rowObjects$)
.subscribe((object:any) => {
//...
})
答案 1 :(得分:-1)
您可以使用combineLatest
合并所有可观察对象,并等待直到每个可观察对象至少触发一次。
import {combineLatest} from 'rxjs';
...
let result = service.getResults();
const observablesToCombine = [];
result.data.forEach((row:any) => {
observablesToCombine.push(this.myService.getObject(row.id));
})
combineLatest(observablesToCombine).subscribe((object: Array<any>) => {
//...
})