Вы должны каким-то образом обработать ваш внутренний массив Observables.Вы можете использовать forkJoin
, merge
или concat
в зависимости от ваших потребностей.
forkJoin
forkJoin
будет обрабатывать ваши внутренние вызовы API параллельно и возвращать массив, когда все APIзвонки завершены.Обратите внимание, что внутренние Observables должны завершиться.Я думаю, это то, что вам должно подойти в вашем приложении.
import { forkJoin } from 'rxjs';
const modifiedAssists$ = assistsAPI$.find().pipe(
concatMap(assists => forkJoin(assists.map(assist => someObservable ))
);
merge
merge
подпишется на все внутренние вызовы API сразу и отправит результаты всех вызовов один за другимпо мере их поступления.
import { merge } from 'rxjs';
const modifiedAssists$ = assistsAPI$.find().pipe(
concatMap(assists => merge(...assists.map(assist => someObservable )),
// toArray() add the toArray operator if you need the result as an array
);
Это даст вам желаемый результат в вашем стеке блиц, но я думаю, что ваш стек бликов несколько ошибочен, а не то, что вы ищете в примере кода из вашего вопроса, так какinner Observable в вашем стеке выделяет несколько раз, и окончательный результат не является массивом.Если порядок внутренних запросов не имеет значения, все они выдают одно значение, а затем завершаются, и вам нужны результаты всех запросов в виде массива, просто используйте forkJoin
.
concat
concat
будет подписываться на все внутренние вызовы API один за другим.Следующая наблюдаемая в последовательности будет подписана только после завершения предыдущей.Поэтому выполнение будет медленнее, чем с forkJoin
или merge
, поскольку следующий HTTP-запрос будет выполнен только после того, как предыдущий вернул значение.Используйте это, если вызовы вашего userAPI
должны выполняться в том же порядке, что и assists
в вашем массиве.
import { concat } from 'rxjs';
const modifiedAssists$ = assistsAPI$.find().pipe(
concatMap(assists => concat(...assists.map(assist => someObservable )),
// toArray() add the toArray operator if you need the result as an array
);