【问题标题】:Reactive programming: Emit a specified element when a stream is idle for some time反应式编程:当流空闲一段时间时发出指定元素
【发布时间】: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。

【问题讨论】:

  • 像这样重复使用原始流是不好的 - 它创建了两个订阅。和汉兰达一样,只有一个。

标签: reactive-programming


【解决方案1】:

我最后做的是:

originalStream.flatMapLatest({x -> 
    return Observable.timer(30, scheduler: MainScheduler.instance)
        .map{_ -> defaultValue}
        .startWith(x)
})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-22
    • 2015-11-03
    • 1970-01-01
    • 1970-01-01
    • 2019-02-18
    • 2010-10-09
    • 2012-08-06
    • 1970-01-01
    相关资源
    最近更新 更多