Вы можете использовать Observable.forkJoin
, который будет выполнять вызовы параллельно и возвращаться после завершения всех внутренних наблюдаемых:
this.locationService.getUserLocation()
.flatMap(location => {
// Some code
return this.searchService.getResults(location); // returns an observable
})
.flatMap(searchResponse => {
return Observable.forkJoin(
this.resultsService.getCount(searchResponse.results),
Observable.of(searchResponse) // replace with second call here
);
})
.subscribe(([count, results]) => { // forkJoin returns array of results
console.log(count, results);
});
Подробнее об операторе forkJoin
: Документы
ОБНОВЛЕНИЕ
Как заметил @ChauTran в комментариях, если ваш один или несколько наблюдаемых не завершены (или вам нужно получитьрезультаты, прежде чем они будут завершены), тогда вы можете использовать Observable.combineLatest
( Документы ).
Этот оператор возвращается, как только каждая из внутренних наблюдаемых генерирует по крайней мере один раз .Вот пример с combineLatest
:
this.locationService.getUserLocation()
//...
.flatMap(searchResponse => {
return Observable.combineLatest(
this.resultsService.getCount(searchResponse.results),
Observable.of(searchResponse) // replace with second call here
);
})
.subscribe(([count, results]) => { // forkJoin returns array of results
console.log(count, results);
});