反应式编程:当流空闲一段时间后发出指定的元素

时间:2017-07-21 16:09:19

标签: reactive-programming

我有一个可观察对象,我希望在经过一段时间(超时)后发出一个默认元素,同时保持流仍然打开以便将来发出新值。我怎么能这样做?

我尝试将原始流与另一个流合并,然后将去抖动值映射到我想要的默认值,从而对原始流进行合并。

伪代码:

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。

1 个答案:

答案 0 :(得分:0)

我最终做的是:

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