RxJS 1 array item into sequence of single items - 运算符

新手上路,请多包涵

鉴于这种可观察的

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

它发出 _单个项目_(即数组),将此可观察对象转换为发出 5 个单个项目(或数组组成的任何 内容)的运算符 是什么?

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

原文由 ducin 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 415
2 个回答

我想不出现有的运营商可以做到这一点,但你可以弥补:

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

或更简单的

arrayEmitting$.concatMap(Rx.Observable.of)

或最短的

arrayEmitting$.concatMap(x => x)

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

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

原文由 user3743222 发布,翻译遵循 CC BY-SA 3.0 许可协议

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

原文由 Marten S 发布,翻译遵循 CC BY-SA 3.0 许可协议

推荐问题