2017-02-22 3 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'}

私は、これらの観測可能でない最後の要素でないものを数えるための値を放出する新しいobservableを持っていたいと思います。上記の場合、新しい観測値によって放出される最初の値は3(c、z、v)です。

観測データの1つから新しいデータが放出されるたびに、新たな観測データも集計結果を放出します。例えば、

進[4]:{ 'H'、 'V'}が

進なる[4]:{ 'H'、 'V'、NULL}

新しい観察2(c、z)を放出する。

+0

は、我々はこのようなデータソースを記述することはできますか? – Maxime

+0

小さな大理石の図で質問を更新できる場合は、私は助けるかもしれません:) – Maxime

答えて

1

あなたは、その後のmapcombineLatestを使用することができます。https://plnkr.co/edit/e30MpsacNahHy0VUdQc7?p=preview:

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>

関連する問題