我想异步发出几个HTTP请求,然后将所有响应组合到一个数组中。
如下所示:
getSamples(genes) {
genes.forEach(gene => {
//This is the HTTP get request from other service which returns an observable array
this.vsal.getSamples(gene).subscribe(sampleRequest => {
//I want to join all the responses into sampleIdsSource
this.sampleIdsSource.next(sampleRequest.samples);
},
e => {
this.error.next(e);
})
});
}
最好的方法是什么?
答案 0 :(得分:5)
只需将每个gene
变成可观察对象,然后forkJoin
。 forkJoin
将等到所有源Observable都完成后,并将发出一个数组及其结果。
getSamples(genes) {
const observables = genes.map(gene => this.vsal.getSamples(gene));
return forkJoin(observable);
}