组合多个RxJS可观察量并执行计数任务

时间:2017-02-22 15:46:53

标签: angular rxjs

我是Rxjs的新手,我想知道这个问题是否可以解决。

给定一个5个可观察数组,每个都已经发出了如下数据:

ary [0]:{'a','b','c'}

ary [1]:{'g',null}

ary [2]:{'1','f','3',null}

ary [3]:{'x','y','z'}

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

我想有一个新的observable,用于计算这5个observable的非null最后元素的值。在上面的例子中,新的observable发出的第一个值是3(c,z,v)。

每当从其中一个observable发出新数据时,新的observable也会发出计数结果。例如,

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

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

新的observable将发出2(c,z)。

1 个答案:

答案 0 :(得分: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>
&#13;
&#13;
&#13;