Выдать значение, если прошло определенное время после последнего элемента

У меня есть наблюдаемое: Observable.create<Boolean> {emitter = it}, к которому я подталкиваю некоторые значения. Я хочу, чтобы он опубликовал «ложное» значение, как только прошел определенный период времени, когда какое-либо значение не было передано этому эмиттеру.

Как это возможно с RxJava/Kotlin 2?


person ntakouris    schedule 29.06.2018    source источник


Ответы (1)


Можно попробовать совместить 2 функции: timeout и onErrorReturn.

Observable.create<Boolean> { 
    // use emitter here
}
     .timeout(3, TimeUnit.SECONDS)
     .onErrorReturn { if (it is TimeoutException) false else throw it } 
     .subscribe { println("onNext $it") }

Обновлен фрагмент после уточнения. repeatWhen повторно подпишется на Observable.

Observable.create<Boolean> { 
    // use emitter here
}
    .timeout(3, TimeUnit.SECONDS)
    .onErrorReturn { if (it is TimeoutException) false else throw it }
    .repeatWhen { it }
    .subscribe { println("onNext $it") }
person Anton Holovin    schedule 29.06.2018
comment
Можете ли вы сделать так, чтобы тайм-аут не прерывал наблюдаемое? - person ntakouris; 30.06.2018