【问题标题】:RxJs Debounce does not emit any valueRxJs Debounce 不发出任何值
【发布时间】:2019-09-12 21:48:02
【问题描述】:

据我了解,debouncekeeps track of the most recent value from the source Observable, and spawns a duration Observable by calling the durationSelector function

我有以下代码

    import { interval } from 'rxjs';
    import { debounce } from 'rxjs/operators';

    const data = interval(1000);

    const silenceTimer = interval(2000);
    data.pipe(debounce(val => silenceTimer)).subscribe(x => console.log(x));

我希望它会发出 1、3、5 等,但它根本不会发出任何值。 我是否正确理解了操作员,还是我做错了什么。 谢谢

编辑: 我明白为什么现在不发出任何值了!因为间隔 2000 大于生成间隔 1000,所以所有值都被丢弃。如果我将去抖动间隔减少到 500,所有值都将被发出

【问题讨论】:

    标签: javascript rxjs rxjs-pipeable-operators


    【解决方案1】:

    来自docs

    debounce() 只有在另一个 Observable 确定的特定时间跨度过去且没有另一个源发射时,才从源 Observable 发射一个值。

    注意这句话:没有其他源排放。在您的情况下,interval 将在您的 durationSelector 的 2000 毫秒内继续产生排放,因此 debounce() 永远没有机会发射。

    【讨论】:

    • 如果您查看您引用的链接底部的示例,您会看到间隔用于发出最后一个值
    • 是的,这不是我所指的间隔调用。 data 内的时间间隔将在您的 durationSelector(第二个时间间隔)的 2000 毫秒内持续产生发射,因此 debounce() 永远没有机会发射。
    猜你喜欢
    • 2017-09-03
    • 2020-11-06
    • 1970-01-01
    • 2017-03-07
    • 2019-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-17
    相关资源
    最近更新 更多