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

duc*_*cin 8 javascript observable rxjs

鉴于这种可观察性

Rx.Observable.of([1,2,3,4,5])
Run Code Online (Sandbox Code Playgroud)

它发出一个单独的项目(即一个数组),将这个observable转换为发出5个单项(或者数组包含的内容)的运算符是什么?

示例已启用.of,但通过promises获取数组也是一样,可能还有许多其他示例.不建议更换offrom

use*_*222 7

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

arrayEmitting$.concatMap(arrayValues => Rx.Observable.merge(arrayValues.map(Rx.Observable.of)))
Run Code Online (Sandbox Code Playgroud)

或者更简单

arrayEmitting$.concatMap(Rx.Observable.of)
Run Code Online (Sandbox Code Playgroud)

或者最短的

arrayEmitting$.concatMap(x => x)
Run Code Online (Sandbox Code Playgroud)

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

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

  • `.concatMap(x => x)` - 这就是答案! (3认同)

Mar*_*n S 7

您还可以使用flatMap运算符(/sf/answers/2256922041/):

Observable.of([1, 2, 3, 4])
  .flatMap(x => x)
  .subscribe(x => console.log(x));
// output:
// 1
// 2
// 3
// 4
Run Code Online (Sandbox Code Playgroud)


Joe*_* V. 6

您可以使用fromnow 将数组转换为序列。

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

from([4,5,6])