使用没有前缀延迟的sampleTime运算符?

时间:2019-02-15 13:48:28

标签: javascript angular rxjs observable reactive-programming

我有一个可观察的流,它发出一个数字序列。每个发出的值都需要进行大量的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的延迟为所有发出的值添加前缀。因此,在上面的示例中,直到250ms之后才发出值 14 。问题在于值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 个答案:

答案 0 :(得分:3)

我相信对于您的用例throttleTime更合适。让我们看看使用文档图片的区别:

如您所见,油门时间开头没有填充

sampleTime:Sample time timeline 油门时间:Throttle time timeline