debounceTime 和 throttleTime 的弹珠图

2022-01-16  本文已影响0人  _扫地僧_

debounceTime:测试代码

import {
  concat,
  debounceTime,
  filter,
  interval,
  mapTo,
  of,
  take,
  throttleTime,
} from 'rxjs';

const a = of(1);
const b = of(2);

const c = concat(a, b);

c.subscribe((data) => console.log(data));

const a1$ = interval(500).pipe(take(2), mapTo('A'));
const a2$ = interval(1000).pipe(take(3), mapTo('B'));
const a3$ = interval(500).pipe(take(3), mapTo('C'));
const source$ = concat(a1$, a2$, a3$);

const result$ = source$.pipe(debounceTime(800));

result$.subscribe((data) => console.log(data));

最后输出:A B B C

弹珠图:


第一阶段的两个 A,只有后者才能进入下游,因为第二个 A 和第二阶段的第一个 B,间隔时间大于 800 毫秒。

第二阶段的前两个 B 能够进入下游,而最后一个 B 不行,∵最后一个 B 和第三阶段的第一个 C 时间间隔小于 800 毫秒。

上游完结时,生成的最后一个元素,总是能进入下游。

如果改成 throttleTime,输出的序列为:A B B B C

弹珠图:


第二个 A 和 第一个 A 的时间间隔小于 800 毫秒,故不能进入下游。三个 B 的生成间隔全部大于 800 毫秒,故全部进入下游。第二个 C 生成时,距离最后一个 B 的生成已经过去了 1秒钟,时间间隔大于 800 毫秒,故第二个 C 进入下游。

更多Jerry的原创文章,尽在:"汪子熙":


上一篇下一篇

猜你喜欢

热点阅读