RxJava 也许:处理 Empty 情况的任何巧妙方法?

Man*_*odi 7 kotlin rx-java rx-kotlin

我被困在这个问题上,这应该很简单。我需要订阅者在Maybe作为Empty Maybe. 我找到

  1. 我们可以传递默认的 Maybe 值或使用 switchIfEmpty 但我觉得两者都很笨拙。
  2. 还有一个 subscribe 函数,它采用 onComplete 函数(以及其他两个事件的处理程序),但 onComplete 不采用任何可用于查找是否已完成为空的参数。
  3. 另一种方式可能是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) })
}
Run Code Online (Sandbox Code Playgroud)

但正如预期的那样,它运行订阅两次,在这里测试:-

Maybe.create<Int> {
    println("subscribing")
    //Remove line below to create Empty Maybe
    it.onSuccess(5)
    it.onComplete()
}
    .subscribeWithEmptyHandler({println("success")},{println("error")},{println("empty")})
Run Code Online (Sandbox Code Playgroud)

有人可以建议更简洁的方法来解决这个问题吗?

Dav*_*ten 8

使用Maybe.doOnEvent(java示例):

Maybe
 .empty()
 .doOnEvent((value, error)-> {
    if (value==null && error == null) {
      System.out.println("empty!");
    }})
 .subscribe();
Run Code Online (Sandbox Code Playgroud)