RxSwift throttle()获取第一个元素

时间:2016-10-02 02:16:17

标签: swift rx-swift reactivex

我正在寻找一种方法,throttle()运算符在给定的时间间隔内放弃Observable中的第一个元素,而不是最后一个元素。

RxSwift - Debounce/Throttle "inverse"中已经提出(并回答过)类似的问题,但我希望避免这些答案存在不足之处。也就是说,在理想情况下,获得Observable中发出的第一个元素,并且在时间间隔的持续时间内忽略任何将来的元素。但是,在使用window()timer()时,有两个元素可能会在给定的时间间隔内 ,因为计时器不会与开始时并行运行throttle()来电。例如:

|..........|..........|..........|
                    ^   ^
                first   second

它们落入不同的窗口,因此都被链接答案中描述的不完美解决方案所接受。

理想情况下,只要窗口中的第一个元素进入,就会有一种方法重新启动计时器,因此上面的示例将类似于:

|..........|.......|..........|
                    ^   ^
                first   second (ignored)

有什么想法吗?

编辑:要清楚,我不确定RxSwift 3.0-beta1的throttle()种类如何处理这个问题,但我正在寻找RxSwift 2.x实现的解决方案。

1 个答案:

答案 0 :(得分:2)

事实证明,rxSwift 3.0完全以我想要的方式处理throttle()。它需要一个元素然后忽略任何其他元素x秒(没有问题'我在问题中提到了这个问题)。

为了完整起见:debounce()仍然按照rxSwift' old'限制的定义。也就是说,它采用时间间隔中的最后一项。