“扁平化”内在的可观察者

时间:2018-01-21 18:03:10

标签: rxjs reactive-programming

如何压扁这个可观察数组?

var observables = [
  Rx.Observable.of(1),
  Rx.Observable.of(2),
  Rx.Observable.of(3)
]

Rx.Observable.of("a").mergeMap(x => {
  return Rx.Observable.from(observables)
}).subscribe(y => {
  console.log(y)
}) 

我的期望是得到:

1
2
3

但相反,我正在

ScalarObservable { _isScalar: true, value: 1, scheduler: null }
ScalarObservable { _isScalar: true, value: 2, scheduler: null }
ScalarObservable { _isScalar: true, value: 3, scheduler: null }

我搜索了这个网站,发现了这个:How to flatten Array of Observables in an Observable ...,但看起来太复杂了(?)的原因。或者可能不是我正在寻找的东西。

有什么想法?建议?

谢谢!

2 个答案:

答案 0 :(得分:2)

你可以merge他们在一起:

Rx.Observable.merge(...observables)

const obs$ = [
  Rx.Observable.of(1),
  Rx.Observable.of(2),
  Rx.Observable.of(3),
];

Rx.Observable.merge(...obs$).subscribe(console.log);
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/5.5.6/Rx.min.js"></script>

答案 1 :(得分:0)

这是代码,包含你的建议(合并),我把它放在一个concatMap中...因为那就是我正在处理的情况,我需要在该块内部生成一个observable数组,并且它们合并到外部可观察量中:

observables = [
  Rx.Observable.of(1),
  Rx.Observable.of(2),
  Rx.Observable.of(3)
]

Rx.Observable.of("a").concatMap(x => {
  return Rx.Observable.merge(observables)
}).subscribe(y => console.log(y))
相关问题