Комбинированный ответ от нескольких HTTP-запросов из цикла - PullRequest
1 голос
/ 20 марта 2019

Я хотел бы сделать несколько 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 Ответ

5 голосов
/ 20 марта 2019

Просто превратите каждый gene в Наблюдаемый, а затем forkJoin их.forkJoin будет ждать, пока все исходные Observable завершатся, и выдаст один массив со своими результатами.

getSamples(genes) {
  const observables = genes.map(gene => this.vsal.getSamples(gene));
  return forkJoin(observable);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...