我有一个可观察对象,我希望在经过一段时间(超时)后发出一个默认元素,同时保持流仍然打开以便将来发出新值。我怎么能这样做?
我尝试将原始流与另一个流合并,然后将去抖动值映射到我想要的默认值,从而对原始流进行合并。
伪代码:
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。
答案 0 :(得分:0)
我最终做的是:
originalStream.flatMapLatest({x ->
return Observable.timer(30, scheduler: MainScheduler.instance)
.map{_ -> defaultValue}
.startWith(x)
})