RxJS 1数组项目为单项的顺序 - 运算符

时间:2017-04-07 16:44:48

标签: javascript rxjs observable

鉴于这种可观察的

Rx.Observable.of([1,2,3,4,5])

发出一个单项(即一个数组),运算符是什么,它会将这个observable转换成一个发出5个单项(或者任何数组由?)

组成

示例在.of上,但是通过promises获取数组也是一样,可能还有很多其他的例子。不建议将of替换为from

5 个答案:

答案 0 :(得分:6)

我想不出现有的操作员可以做到这一点,但你可以做一个:

arrayEmitting$.concatMap(arrayValues => Rx.Observable.merge(arrayValues.map(Rx.Observable.of)))

或更简单的

arrayEmitting$.concatMap(Rx.Observable.of)

或最短的

arrayEmitting$.concatMap(x => x)

这是未经测试的,所以让我知道这是否适合你,并使用Rxjs v4 API(特别是最后一个)。这基本上是:

  • 将每个传入的值数组处理为一个单元(意味着下一个传入的数组不会与前一个数组交错 - 这就是我使用concatMap的原因)
  • 将传入的数组转换为可观察的数组,这些数组被合并:这样可以确保分别按顺序发送值

答案 1 :(得分:5)

您也可以使用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

答案 2 :(得分:2)

mergeAll

Observable.of([4, 5, 6])
  .mergeAll()
  .subscribe(console.log);
// output:
// 4
// 5
// 6

答案 3 :(得分:0)

不了解concatMap(x => x)flatMap(x => x)为何起作用,它不会改变任何东西。 这应该可以工作(rxjs 6或更高版本):

of([4,5,6]).pipe(mergeMap(from))

答案 4 :(得分:0)

您现在可以使用from将数组转换为序列。

https://www.learnrxjs.io/operators/creation/from.html

from([4,5,6])