【发布时间】:2016-09-21 17:18:22
【问题描述】:
我有两个可观察的:
Observable O(open): 在 textview 中打开一些内容的文件
Observable E(edit):在 textview 中编辑的文件内容
我想对 E observable 进行去抖动,并将其与 O observable 合并。
obs = Observable.merge(E.debounce(2000, TimeUnit.MILLISECONDS) , O)
.subscribe(content->System.out.println("new content: " + content))
问题是,如果 E 发出事件 E1 并且紧接着 O 发出 O1 事件,我们有输出:
new content: O1
new content: E1 // this output is rebundant (cuz we already have newer content O1)
这是正在发生的事情的图表:
如何从 debounced observable 中去掉这个过多的旧事件?
【问题讨论】:
-
为什么不将
debounce运算符移出merge工作? -
@TassosBassoukos ,编辑事件(E1)非常频繁(实际上它是一个键类型事件)所以我想去抖动它。但是,当我打开文件时,我想立即收到一个 O1 事件而不反弹。
-
您可以使用“版本控制”,例如时间。映射您的 Observable O 和 Observable E 事件(去抖动之前)以包含内容和时间。然后,您可以比较 Observable E 事件是否比 Observable O 事件“更老”。您可能需要切换到 Observable.combineLatest 才能实现。