Да, с оператором forkJoin
:
const subscription = forkJoin(
this.httpRequestUno(),
this.httpRequestDue(),
this.httpRequestTre()
).subscribe(value => {
// value is an array with the results:
[result-of-request-uno, results-of-rquest-due, result-of-request-tre]
}, error => {
);
На самом деле, forkJoin
также может получить массив наблюдаемых, если вы хотите, чтобы число запросов было динамическим, и результирующая наблюдаемая завершится, когда завершатся все другие наблюдаемые. Конечно, если один из наблюдаемых выдает ошибку, вы получите ошибку (первую). В этом случае результат других наблюдаемых будет игнорироваться.
Подробнее: https://www.learnrxjs.io/operators/combination/forkjoin.html
Это, примерно, эквивалент Promise.all
EDIT
Я разбудил ваше jsfiddle, чтобы исправить ваш пример: https://jsfiddle.net/hmv20xjh/1/. Проблема в вашем коде состоит в том, что ваши наблюдаемые никогда не завершаются, а forkJoin
возвращает последнее значение наблюдаемой и делает это только после завершения. Итак, в вашем коде наблюдаемое, которое возвращает forkJoin
, просто ждет вечно и никогда не возвращает значения.
В моём, однако, наблюдаемые завершены. forkJoin
- хороший оператор для ожидания наблюдаемых объектов, представляющих HTTP-запрос, поскольку они дают только один результат и затем завершаются. Если вам нужно объединить наблюдаемые, которые дают несколько результатов, не дожидаясь их завершения, вам нужно использовать более сложные операторы, такие как flatMap
или mergeMap