使用Rx.js以正确的顺序组合2个数组

时间:2017-03-17 14:15:09

标签: rxjs

我有点新Rx.js并尝试让这个场景工作。基本上我需要结合以下两个序列,使它们合并为一个数组,其中obs1元素总是在obs2元素之前,

var obs1 = Rx.Observable.create(function(observer){
setTimeout(function(){
 observer.next([1,2,3]);
  }, 1000);
});

var obs2 = Rx.Observable.create(function(observer){
setTimeout(function(){
 observer.next([4,5,6]);
  }, 10);
});

顺便说一下,我不会“完成”任何这些可观测量。

我希望订阅中的最终输出为[1,2,3,4,5,6]。 我尝试了,concat,flatMap在几个变化,但没有帮助。我可能,创建另一个observable,并通过推动obs1的元素,然后是obs2然后调用“next”来创建一个数组,但是这感觉不是正确的方法...

你能帮助理解操作员在这里工作的内容吗?

1 个答案:

答案 0 :(得分:0)

首先,编写代码的“RxJs”方式是:

var obs1 = Rx.Observable.of([1, 2, 3]).delay(1000);
var obs2 = Rx.Observable.of([4, 5, 6]).delay(10);

然后,您可以使用concat运算符:

obs1
  .combineLatest(obs2)
  .map(([rslt1, rslt2]) => [...rslt1, ...rslt2])
  .do(arr => console.log(arr)) // 1, 2, 3, 4 ,5, 6
  .subscribe()

这是一个有效的Plunkr:https://plnkr.co/edit/tMceIDiLzYIfVemuZka9?p=preview