Christian-Yang / Translate-and-save

Translate and save for my self
1 stars 0 forks source link

RxJS的debounceTime函数 #2

Open Christian-Yang opened 7 years ago

Christian-Yang commented 7 years ago

对时间轴的操纵

RxJS一个很强大的特点是,它以流的方式来对待数据,因此,可以用一些操作符对整个流上所有的数据进行延时、取样、调整密集度等等。

const timeA$ = Observable.interval(1000)
const timeB$ = timeA$.filter(num => {
    return (num % 2 != 0)
      && (num % 3 != 0)
      && (num % 5 != 0)
      && (num % 7 != 0)
  })

const timeC$ = timeB$.debounceTime(3000)
const timeD$ = timeC$.delay(2000)

示例代码中,我们创建了四个流:

A是由定时器产生的,每秒一个值 B从A里面过滤掉了一些 C在B的基础上,对每两个间距在3秒之内的值进行了处理,只留下后一个值 D把C的结果整体向后平移了2秒 所以结果大致如下: filename 注意C的产生,上面的解释说的是i对每两个间距在3秒之内的值进行处理,三秒之内就是2秒,也就是说间隔是两秒的值,只是保留最后一个。 所以看上面的图,从1开始,两秒距离没有值,那么于是就把1放在3的位置上。然后继续向前走,走到11的位置,然后经过两秒钟到了13,所以13取代了11,然后13向后继续走了2妙,发现没有新值出现,所以13的值放在了15的位置上。然后继续向前走17出现了,17出现之后间隔2妙19出现了,所以19取代了17,并最终放在了21的位置上。

distinctUntilChanged函数:

去除连续重复的值:

// 去除连续重复的元素,输出A,B,A,B,A
Rx.Observable.of('A', 'B', 'B', 'A', 'B', 'A', 'A')
    .distinctUntilChanged( )
    .subscribe( x => console.log( x ))

参考资料: rxjs5.X系列 —— filter系列 api 笔记:http://www.cnblogs.com/BestMePeng/p/rxjs_learn_filter.html
RxJS 入门指引和初步应用:http://web.jobbole.com/90548/
构建流式应用—RxJS详解:https://github.com/joeyguo/blog/issues/11?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io