2017-03-17 34 views
1

我有點新Rx.js並試圖讓這個場景工作。基本上我需要將以下兩個序列合併成一個數組,其中obs1元素總是在obs2元素之前,使用Rx.js以正確的順序組合2個數組我使用Rx.js

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在幾個變化,但沒有幫助。我可以創建另一個可觀察對象,並通過推入obs1的元素,然後obs2的元素,然後調用「next」來創建一個數組,然而,這並不覺得正確的方式來做到這一點...

請問您能幫助理解哪些操作員可以在這裏工作?

+0

好吧,如果你沒有使用任何完整的通知,你怎麼知道你什麼時候可以開始從第二個Observable發射值? – martin

回答

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