本文介绍了区分两个可观察对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在寻找区分两个Observable的最佳方法.ObservableB完成后应立即发出ObservableA的过滤值,而不必等待ObservableA完成.

I'm looking for a best way to Diff two Observables.Filtered values from ObservableA should be emited as soon as ObservableB completes without waiting for ObservableA to complete.

<html>
  <head>
    <title></title>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/5.3.0/Rx.js"></script>
    <script>

    const observable_a =  Rx.Observable.interval(2000).take(10);//0,1,2,3,4,5,6,7,8,9
    const observable_b = Rx.Observable.interval(1000).map(x=>x+3).take(5);//3,4,5,6,7

someDiffObservable(observable_a,observable_b).subscribe(console.log);//should output 0,1,2,8,9
    
    </script>
  </head>
  <body></body>
</html>

推荐答案

尝试一下:

const a$ = Rx.Observable.interval(2000).take(10).share();
const b$ = Rx.Observable.interval(1000).map(x=>x+3).take(5);

Rx.Observable.combineLatest(
    a$.buffer(
      b$.startWith(null).last().concat(a$)
    ), 
    b$.toArray(),  
    (aItems, bItems) => aItems.filter(a => !bItems.includes(a))
  )
  .concatMap(filteredItems => Rx.Observable.from(filteredItems))
  .subscribe(console.log);
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/5.5.2/Rx.js"></script>

这篇关于区分两个可观察对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-21 06:10