Я застрял в этой проблеме, которая должна быть довольно простой.Мне нужен подписчик для выполнения блока кода, когда Maybe
завершено как Empty Maybe
.Я обнаружил, что
- мы можем передать значение по умолчанию Maybe или использовать switchIfEmpty, но я чувствую, что оба взломаны.
- Также есть функция подписки, которая принимает функцию onComplete (вместе с обработчиками для двух других событий), но onComplete не принимает никаких аргументов, которые можно использовать, чтобы найти, если, возможно, было завершено пустым.
- Другой способ может быть
Maybe.isEmpty.blockingGet()
, но он тоже грязный.
Я попытался выполнить следующее ( Синтаксис Kotlin ): -
fun <T> Maybe<T>.subscribeWithEmptyHandler(onSuccess: (T) -> Unit, onError: (Throwable) -> Unit, onEmpty: () -> Unit) {
this.isEmpty.subscribe({ if (it) onEmpty() }, { onError(it) })
this.subscribe({ onSuccess(it) }, { onError(it) })
}
Нокак и ожидалось, дважды запускается подписка, протестировано здесь: -
Maybe.create<Int> {
println("subscribing")
//Remove line below to create Empty Maybe
it.onSuccess(5)
it.onComplete()
}
.subscribeWithEmptyHandler({println("success")},{println("error")},{println("empty")})
Может кто-нибудь предложить более точный способ решить эту проблему?