我被困在这个问题上,这应该很简单。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")})
有人可以建议更简洁的方法来解决这个问题吗?