来自循环的多个HTTP请求的组合响应

时间:2019-03-20 07:29:01

标签: angular rxjs

我想异步发出几个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);
            })
        });  
    }

最好的方法是什么?

1 个答案:

答案 0 :(得分:5)

只需将每个gene变成可观察对象,然后forkJoinforkJoin将等到所有源Observable都完成后,并将发出一个数组及其结果。

getSamples(genes) {
  const observables = genes.map(gene => this.vsal.getSamples(gene));
  return forkJoin(observable);
}