合并固定数量的mergeMapped可观察对象-RxJS

时间:2018-09-08 04:44:01

标签: rxjs observable rxjs5 rxjs6

我正在使用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)

1 个答案:

答案 0 :(得分:1)

  

使用mergeMap时,我的原始数组消失了

原因是mergeMap接受ObservableInput作为您传入的函数的参数。javascriptArrayObservableInput,因此可以在{{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
相关问题