При использовании mergeMap мой исходный массив исчезает
Причина в том, что mergeMap
принимает ObservableInput
в качестве параметра функции, которую вы передаете. Javascript Array
ObservableInput
и, следовательно, работает в mergeMap
, а mergeMap
выполняет свою работу, то есть выравнивает ObservableInput
(считайте, что mergeMap
ранее назывался flatMap
).
Итак, как говорит @cartant, если вы хотите вернуться к массиву, вы должны использовать оператор toArray
.Другими словами,
of([1, 2, 3, 4])
.pipe(
mergeMap(value => { // do stuff with a value of an array}),
toArray()
)
.subscribe(console.log)
эквивалентно
of([1, 2, 3, 4])
.pipe(
map(values => values.map(value => { // do stuff with a value of an array})),
)
Если ваш массив хотя и содержит Observables, и вы хотите в конечном итоге получить значения, которые они уведомляют, когда все они излучают, чем вы должныиспользуйте forkJoin
.Это простой пример
of([1, 2, 3, 4].map(n => of(n)))
.pipe(
switchMap(observablesOfValues => forkJoin(observablesOfValues))
)
.subscribe(console.log)