Возможное решение, хотя требуется немного RxAcrobatics:
Observable
.just(1, 2, 3, 4)
.flatMapSingle { arg ->
doStuff(arg)
.toSingle { true }
.onErrorReturn { false }
}
.filter { it }
.firstElement()
.subscribe()
Если у вас есть контроль над функцией, которая возвращает Completable
, я предлагаю изменить это на Single<Boolean>
, счто вы могли бы более элегантно использовать takeUntil
, например:
Observable
.just(1,2, 3, 4)
.flatMapSingle(::doStuff)
.takeUntil { it }
.subscribe()
Если у вас нет контроля над функцией, которая возвращает Completable, вы все равно можете создать небольшую оболочку:
private fun doStuffWrap(foo: Int) = doStuff(foo)
.toSingle { true }
.onErrorReturn { false }
И используйте элегантное решение:
Observable
.just(1, 2, 3, 4)
.flatMapSingle(::doStuffWrap)
.takeUntil { it }
.subscribe()