web-dev-qa-db-fra.com

RxJava Retourne un single, exécute complétable après

J'essaie d'accomplir ce qui suit: Renvoyer certaines données comme unique, exécuter un complétable après. Le code suivant ne compile pas en raison de single.andThen (). Les actions doivent être exécutées dans cet ordre.

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

Utilisez flatMap:

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

Il existe un opérateur flatMapCompletable spécial dans RxJava2:

single.flatMapCompletable(result -> completable);

2
Varvara Kalinina

En supposant que vous vouliez réellement retourner le Single après le Completable, voici une autre façon:

Utiliser Java:

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

Utilisation de Kotlin:

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

Si quelqu'un est intéressé par une solution RxSwift:

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

saveObjectsA renvoie un Single <[A]> qui est un attribut de B (créé précédemment). Je devais l'enregistrer avant d'enregistrer B.

0
Raphael Souza