我正在使用RxJS v6,但是这个问题也适用于v5。
使用mergeMap
时,我的原始数组消失了,尽管我可以并行执行许多操作,但我不再有办法监视发送到mergeMap
的所有可观察对象的完成时间。
of([1, 2, 3, 4])
.pipe(
mergeMap(values => values),
)
.subscribe(console.log)
// 1
// 2
// 3
// 4
我想看看:
// [1, 2, 3, 4]
到目前为止,我想出的唯一方法是获取数组的长度,但是我敢肯定我一定缺少一些运算符:
of([1, 2, 3, 4])
.pipe(
switchMap(values => (
of(values)
.pipe(
mergeMap(value => value),
bufferCount(values.length),
)
))
)
.subscribe(console.log)
答案 0 :(得分:1)
使用mergeMap时,我的原始数组消失了
原因是mergeMap
接受ObservableInput
作为您传入的函数的参数。javascriptArray
是ObservableInput
,因此可以在{{1}中使用}和mergeMap
完成其工作,即展平 mergeMap
(考虑到ObservableInput
以前被称为mergeMap
)。
因此,正如@cartant所说,如果要返回数组,则必须使用flatMap
运算符。
换句话说
toArray
等效于
of([1, 2, 3, 4])
.pipe(
mergeMap(value => { // do stuff with a value of an array}),
toArray()
)
.subscribe(console.log)
如果您的数组虽然包含Observables,并且您希望最终获得它们所有发出时通知的值,则不必使用of([1, 2, 3, 4])
.pipe(
map(values => values.map(value => { // do stuff with a value of an array})),
)
。这是一个简单的例子
forkJoin