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) }
)
Utilisez flatMap
:
single.flatMap(v -> completable.andThen(Single.just(v)))
Il existe un opérateur flatMapCompletable
spécial dans RxJava2:
single.flatMapCompletable(result -> completable);
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) }
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.