Вы можете использовать смесь concatMap
и zip
:
resolve(): Observable<Array<string>> {
return this.serviceA.getAllfooNames().pipe(
concatMap((names) =>
zip(...names.map((name) => this.serviceB.getAllBarNames(name)))
),
map((...names) =>
names.reduce((acc, curr) => acc.concat(curr), [])
)
);
}
Это вернет все строки, возвращенные из вызова serviceB, в одном большом массиве строк.
В основном то, что он делает, вы называете getAllfooNames
, с concatMap
вы ждете, пока этот запрос не будет завершен, который возвращает набор имен в строке. После этого вы берете их с помощью оператора zip
. Этот оператор выполняет все наблюдаемые, передаваемые туда, используя метод карты массива, и выдает, как только все они завершены.
Затем он выбирается на карте, которая получает несколько строковых массивов в качестве параметров. Затем вы используете reduce
, чтобы создать его в одном большом массиве.