基于我的Observable中的条件,我想延迟onNext / onError。我的代码如下:
fun check3(){
val list = arrayListOf(1,2,3,4,5,6,7, null)
val obs = Observable.create<Int> { subscriber ->
list.filter {
it != null
}.map {
if (it!! %2 == 0 ) {
Thread.sleep(3000)
subscriber.onError(IllegalArgumentException("Mod is true"))
} else {
subscriber.onNext(it)
subscriber.onComplete()
}
}
}
}
这里很痛Thread.sleep(3000)
是否有更好的方法?基本上,如果要满足if(it%2)条件,我想将onError通知延迟给我的订阅者
答案 0 :(得分:1)
您可以使用concatMap
将睡眠转变为非阻塞性延迟:
Observable.fromIterable(list.filter { it != null })
.concatMap {
if (it!! % 2 == 0) {
return@concatMap Observable.error(IllegalArgumentException("Mod is true"))
.delay(3, TimeUnit.SECONDS, true)
}
Observable.just(it)
}
.take(1)