2017-02-22 45 views
0

我是Rxjs的新手,我想知道這個問題是否可以解決。梳理多個RxJS可觀察物並執行計數任務

鑑於5觀察到的陣列,每個已經發出一些數據如下:

進制[0]:{ 'A', 'B', 'C'}

進制[1] :{ 'G',NULL}

進制[2]:{ '1', 'F', '3',NULL}

進制[3]:{ 'X', 'Y', 'z'}

ary [4]:{'h','v'}

我想有一個新的可觀察值,用於計算這5個可觀察值的非空最後一個元素的值。在上面的例子中,新觀測值發出的第一個值是3(c,z,v)。

每當從一個可觀察對象發出新數據時,新可觀察對象也會發出計數結果。例如,當

進制[4]:{ 'H', 'V'}變爲

進制[4]:{ 'H', 'V',NULL}

新觀察到的會發出2(c,z)。

+0

我們可以這樣描述你的數據源:https://plnkr.co/edit/e30MpsacNahHy0VUdQc7?p=preview? – Maxime

+0

如果你可以用一個小的大理石圖更新你的問題,我可能會幫助:) – Maxime

回答

1

你可以使用combineLatest與隨後map

const baseObs = [ 
 
    new Rx.Subject(), 
 
    new Rx.Subject(), 
 
    new Rx.Subject(), 
 
    new Rx.Subject(), 
 
    new Rx.Subject(), 
 
] 
 

 
const counter$ = Rx.Observable 
 
    .combineLatest(baseObs) 
 
    .map(dataList => dataList.filter(d => d != null).length); 
 
    
 
counter$.subscribe(
 
    num => console.log(`Num is ${num}`) 
 
); 
 

 
baseObs[0].next("a"); 
 
baseObs[1].next(null); 
 
baseObs[2].next(null); 
 
baseObs[3].next("z"); 
 
baseObs[4].next("v"); 
 

 
setTimeout(() => baseObs[4].next(null), 300);
<script src="https://unpkg.com/rxjs/bundles/Rx.min.js"></script>