2016-10-02 284 views
0

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

RxSwift - Debounce/Throttle "inverse"中已经提出了类似的问题(并回答了),但是我想避免的答案中存在一些不完善之处。也就是说,在理想的情况下,获得在Observable中发射的第一个元素,并且在时间间隔期间任何未来的元素都被忽略。但是,与window()timer()一起使用时,有可能两个元素在的给定时间间隔内继续,因为定时器发生时不会平行于throttle()调用的开始。例如:

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

它们分为不同的窗口,因此二者通过在链接的答案中描述的不完全的溶液接受。

理想情况下,将尽快在窗口的第一个元素进来重启定时器的一种方式,所以,上面的例子反而会看起来像:

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

任何想法?

编辑:很明显,我不知道RxSwift 3.0-beta1的throttle()种类如何处理这个问题,但我正在寻找RxSwift 2.x实现的解决方案。

回答

2

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

为了完整起见:debounce()仍然符合rxSwift的'旧'节流定义。也就是说,它需要一个时间间隔中的最后一个项目。

相关问题