考虑以下使用情况:
- 需要尽快交付第一项
- 需要将以下事件与1秒超时去抖动
我最终实现了基于OperatorDebounceWithTime
的自定义操作符,然后像这样使用它
.lift(new CustomOperatorDebounceWithTime<>(1, TimeUnit.SECONDS, Schedulers.computation()))
CustomOperatorDebounceWithTime
会立即发送第一个项目,然后使用OperatorDebounceWithTime
运算符的逻辑来防抖后续项目。
有没有更简单的方法来实现所描述的行为?让我们跳过compose
运算符,因为它无法解决问题。我正在寻找一种在不实现自定义运算符的情况下实现此目的的方法。
publish
来避免订阅两次(在冷的可观察情况下会做两倍的工作,在热的情况下可能会失去同步)。示例如下:Observable.from(items).publish(publishedItems -> publishedItems.limit(1).concatWith(publishedItems.skip(1).debounce(1, TimeUnit.SECONDS)))
注意,如果Observable
为空,first
将会出错,因此,除非这是预期行为,否则您可能需要使用limit(1)
。 - loparObservable.from(items).publish(publishedItems -> publishedItems.limit(1).concatWith(publishedItems.debounce(1, TimeUnit.SECONDS)))
。 - TrevorSStone