【发布时间】:2017-04-07 16:44:48
【问题描述】:
鉴于这样的可观察性
Rx.Observable.of([1,2,3,4,5])
发出一个单个项目(即一个数组),什么是运算符,它将将此可观察对象转换为一个发出 5 个单个项目(或任何数组由)组成?
这个例子在.of,但是通过promise获取数组也是一样的,可能还有很多其他的例子。不建议将of替换为from
【问题讨论】:
标签: javascript rxjs observable
鉴于这样的可观察性
Rx.Observable.of([1,2,3,4,5])
发出一个单个项目(即一个数组),什么是运算符,它将将此可观察对象转换为一个发出 5 个单个项目(或任何数组由)组成?
这个例子在.of,但是通过promise获取数组也是一样的,可能还有很多其他的例子。不建议将of替换为from
【问题讨论】:
标签: javascript rxjs observable
我想不出现有的运营商可以做到这一点,但你可以组成一个:
arrayEmitting$.concatMap(arrayValues => Rx.Observable.merge(arrayValues.map(Rx.Observable.of)))
或者更简单的
arrayEmitting$.concatMap(Rx.Observable.of)
或最短的
arrayEmitting$.concatMap(x => x)
这是未经测试的,所以让我知道这是否对您有用,并且使用 Rxjs v4 API(特别是最后一个)。这基本上是:
concatMap 的原因)【讨论】:
.of 来简化,但我以为你说你不想这样做,即arrayEmitting$.concatMap(Rx.Observable.of)
.concatMap(x => x) - 这就是答案!
您也可以使用 flatMap 运算符 (https://stackoverflow.com/a/32241743/3338239):
Observable.of([1, 2, 3, 4])
.flatMap(x => x)
.subscribe(x => console.log(x));
// output:
// 1
// 2
// 3
// 4
【讨论】:
【讨论】:
mergeAll:
Observable.of([4, 5, 6])
.mergeAll()
.subscribe(console.log);
// output:
// 4
// 5
// 6
【讨论】:
不明白为什么concatMap(x => x) 或flatMap(x => x) 有效,它不会改变任何东西。
这应该可以工作(rxjs 6 或更高版本):
of([4,5,6]).pipe(mergeMap(from))
【讨论】: