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

use*_*740 1 rxjs angular

我想异步发出几个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);
            })
        });  
    }
Run Code Online (Sandbox Code Playgroud)

最好的方法是什么?

mar*_*tin 5

只需将它们gene变成一个Observable,然后将forkJoin它们变为。forkJoin将等到所有源Observable完成,并发出带有结果的单个数组。

getSamples(genes) {
  const observables = genes.map(gene => this.vsal.getSamples(gene));
  return forkJoin(observable);
}
Run Code Online (Sandbox Code Playgroud)