Это код, который должен позволить вам создать responseStream
, который вы ищете.
const responseStream = albums$.pipe(
map(albumIds => albumIds.map(id => from(fetch(apiUrl(id))).pipe(mergeMap(resp => resp.json())))),
mergeMap(obsOfIds => forkJoin(obsOfIds)),
);
Прежде всего, давайте сосредоточимся на forkJoin
. Вы можете передать этому оператору массив Observables, и этот оператор вернет Observable, который испускается, когда все Observables во входном массиве испустили, и он выпустит массив со значениями, испускаемыми каждым Observable во входном массиве.
Это то, что вы, вероятно, ищете. Как создать массив Observables, который вам нужен? Это то, что выполняет первый оператор map
.
Рассмотрим одну вещь, когда смотришь на этого оператора.
map(albumIds => albumIds.map(id => from(fetch(apiUrl(id))).pipe(mergeMap(resp => resp.json()))))
Вы используете 2 раза map
, но это НЕ одно и то же map
. Первый map
, то есть самый внешний, является оператором map
Observable. Вторым map
, то есть самым внутренним, является map
метод массива.
Я обновил ваш стек, и похоже, он работает правильно.