【发布时间】:2017-07-21 16:09:18
【问题描述】:
我有一个可观察对象,我想在经过一段时间(超时)后发出一个默认元素,同时保持流仍然打开以在将来发出新值。我该怎么做?
我尝试通过将原始流与另一个流合并来实现此目的,该流对原始流进行去抖动,同时将去抖动值映射到我想要的默认值。
伪代码:
defaultDebounced = originalStream.debounce(time).map({x -> myDefaultValue})
myStream = rx.merge(originalStream, defaultDebounced)
虽然我不知道我是否会遇到一些边界情况,例如以下情况,在这种情况下,原始流会在超时触发时发出一个项目,并且偶然会在之后发出默认值。
original: ----A----B----------------------C------------
debounced: -----------------------<timeout>X------------
merged: --------------------------------CX-----------
此外,第一个 observable 必须发出至少一个项目才能使 debounce 发出默认值。
注意:无论实现如何,我都想知道正确的 rx 方法,但以防万一我正在研究 RxSwift。
【问题讨论】:
-
像这样重复使用原始流是不好的 - 它创建了两个订阅。和汉兰达一样,只有一个。