【发布时间】:2018-06-06 15:46:08
【问题描述】:
我被这个问题困住了,这应该很简单。当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")})
有人可以提出更简洁的方法来解决这个问题吗?
【问题讨论】: