Rx Java:OnNext之前休眠(从Observable发射之前休眠)

问题描述 投票:0回答:1

基于我的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通知延迟给我的订阅者]

java kotlin rx-java rx-java2
1个回答
0
投票

您可以使用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)
© www.soinside.com 2019 - 2024. All rights reserved.