我有点新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”来创建一个数组,但是这感觉不是正确的方法...
你能帮助理解操作员在这里工作的内容吗?
答案 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