代码之家  ›  专栏  ›  技术社区  ›  Reactgular

使用sampleTime运算符而不使用前缀延迟?

  •  0
  • Reactgular  · 技术社区  · 7 年前

    我有一个可观测的流,它发出一系列的数字。每个发出的值都需要大量的UI更新来重新定位组件。

    所以我一直在用 sampleTime() 操作员将排放值调节为周期性的间隔,这非常有效。

    例如

    observable.pipe(sampleTime(250)).subscribe(value => console.log(value));
    
    // outputs (periods are delays)
    ...10...11...12......................14...15...16
    

    这在将UI的更新限制为较慢的更新间隔方面非常有效。

    我遇到了这样的问题 sampleTime(250) 将以250ms延迟作为所有发出值的前缀。在上面的例子中 14 直到250毫秒后才会释放。问题是有一个 长时间延迟 在值14之前。

    因此,我需要一个可观察的流,它使用sampleTime()将值限制250ms,但我不希望在空闲期后的第一个值有250ms的初始延迟。

    例如

    // currently 
    ...10...11...12......................14...15...16
    ^^^ remove these dots             ^^^ remove these dots
    
    // what I really want
    10...11...12...................14...15...16
    

    我想不出更好的解释方法了。

    1 回复  |  直到 7 年前
        1
  •  4
  •   Andrey    7 年前

    我相信对你有用 throttleTime 更合适。让我们使用文档图片来了解差异:

    正如您所见,throttleTime在开始时没有填充

    采样时间: Sample time timeline 节流时间: Throttle time timeline