7

私はこの問題で立ち往生しています。これはかなり単純なはずです。Maybeが として完了したときにコード ブロックを実行するには、サブスクライバーが必要Empty Maybeです。見つけた

  1. デフォルトの Maybe 値を渡すことも、switchIfEmpty を使用することもできますが、どちらもハッキーだと思います。
  2. また、onComplete 関数を (他の 2 つのイベントのハンドラーと共に) 受け取る subscribe 関数がありますが、onComplete は、空の完了かどうかを調べるために使用できる引数を取りません。
  3. 別の方法は かもしれませんがMaybe.isEmpty.blockingGet()、それも汚れています。

私は次のことを試しました( Kotlin Syntax ):-

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) })
}

しかし、予想どおり、サブスクリプションを 2 回実行しており、ここでテストしています:-

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

誰かがこれを解決するためのより良い方法を提案してもらえますか?

4

3 に答える 3