web-dev-qa-db-ja.com

RxJavaリターンシングル、完了後に実行可能

私は次のことを達成しようとしています:一部のデータを単一として返し、完了後に実行可能にします。次のコードは、single.andThen()のためにコンパイルされません。アクションはこの順序で実行する必要があります。

val single = Single.create<String> { it.onSuccess("result") }
val completable = Completable.create { println("executing cleanup") }
val together = single.andThen(completable)

together.subscribe(
        { println(it) },
        { println(it) }

)
11
Jeremy

flatMapを使用:

single.flatMap(v -> completable.andThen(Single.just(v)))
27
akarnokd

RxJava2には特別なflatMapCompletable演算子があります:

single.flatMapCompletable(result -> completable);

2

実際にSingle after The Completableを返したいと仮定すると、別の方法があります:

Javaの使用:

single.flatMap(x -> completable.toSingleDefault(x))

Kotlinの使用:

single.flatMap { completable.toSingleDefault(it) }
0
Keplerian

RxSwiftソリューションに興味がある場合:

saveObjectsA().flatMap { (objectsA: [A]) -> Single<Bool> in
        B.objects = objectsA
        return completable.andThen(Single.just(true))
    }

saveObjectsAは、B(以前に作成された)の属性であるSingle <[A]>を返します。 Bを保存する前に保存する必要がありました。

0
Raphael Souza