RxSwift throttle() 获取第一个元素
RxSwift throttle() to get first element
我正在寻找一种方法,让 throttle()
运算符在给定的时间间隔内放弃 Observable
中的第一个元素,而不是最后一个元素。
在 中有人提出(并回答)了类似的问题,但我想避免这些答案中的不完善之处。也就是说,在理想情况下,获得 Observable
中发出的第一个元素,并且在时间间隔的持续时间内忽略任何未来的元素。但是,当使用 window()
或 timer()
时,两个元素可能会在 给定的时间间隔内进行 ,因为计时器恰好没有 [=36] =] 与 throttle()
调用的开始并行。示例:
|..........|..........|..........|
^ ^
first second
它们属于不同的 windows,因此都被链接答案中描述的不完美解决方案所接受。
理想情况下,一旦 window 中的第一个元素出现,就会有一种重新启动计时器的方法,因此上面的示例看起来像:
|..........|.......|..........|
^ ^
first second (ignored)
有什么想法吗?
编辑:明确地说,我不确定 RxSwift 3.0-beta1 的 throttle() 变体如何处理这个问题,但我正在寻找 RxSwift 2.x 实现的解决方案。
事实证明,rxSwift 3.0 以我想要的方式处理 throttle()
。它需要一个元素,然后在 x 秒内忽略任何其他元素(没有我在问题中提到的 'window problem')。
为了完整起见:debounce()
仍然按照 rxSwift 的 'old' 节流定义工作。也就是说,它采用时间间隔中的最后一项。
我正在寻找一种方法,让 throttle()
运算符在给定的时间间隔内放弃 Observable
中的第一个元素,而不是最后一个元素。
在 Observable
中发出的第一个元素,并且在时间间隔的持续时间内忽略任何未来的元素。但是,当使用 window()
或 timer()
时,两个元素可能会在 给定的时间间隔内进行 ,因为计时器恰好没有 [=36] =] 与 throttle()
调用的开始并行。示例:
|..........|..........|..........|
^ ^
first second
它们属于不同的 windows,因此都被链接答案中描述的不完美解决方案所接受。
理想情况下,一旦 window 中的第一个元素出现,就会有一种重新启动计时器的方法,因此上面的示例看起来像:
|..........|.......|..........|
^ ^
first second (ignored)
有什么想法吗?
编辑:明确地说,我不确定 RxSwift 3.0-beta1 的 throttle() 变体如何处理这个问题,但我正在寻找 RxSwift 2.x 实现的解决方案。
事实证明,rxSwift 3.0 以我想要的方式处理 throttle()
。它需要一个元素,然后在 x 秒内忽略任何其他元素(没有我在问题中提到的 'window problem')。
为了完整起见:debounce()
仍然按照 rxSwift 的 'old' 节流定义工作。也就是说,它采用时间间隔中的最后一项。