Rx Java: сон перед OnNext (сон перед излучением из Observable) - PullRequest
1 голос
/ 29 октября 2019

Исходя из условия в моем 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)

Есть ли лучший способ сделать это? По сути, я хочу отложить уведомление onError для моего подписчика, если выполняется условие if (it% 2)

1 Ответ

1 голос
/ 29 октября 2019

Вы можете использовать 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)
...