2017-09-08 8 views
0

J'ai deux complétables que j'ai besoin d'appeler l'un après l'autre. J'ai ce code:RxJava 2 - et puis avec Completable de l'avenir?

public Completable getMyCompletable() { 
    return getFirstCompletable().andThen(getSecondCompletable()); 
} 

public Completable getFirstCompletable() { 
    return Completable.fromFuture(getFirstFuture()); 
} 

public Completable getSecondCompletable() { 
    return Completable.fromFuture(getSecondFuture()); 
} 

Le deuxième avenir dépend de la fin du premier avenir, sinon il échouera. Le problème (je pense) est que quand j'appelle getSecondCompletable() et que je passe le résultat en andThen(), le second Futur est créé et commence à s'exécuter, même si le second Completable n'a pas été abonné et que le premier Futur n'est pas terminé. Cela provoque l'échec de la seconde opération Future, tandis que la première opération Future réussit peu de temps après.

Je migre ce code de RxJava 1 vers RxJava 2. À l'origine, le code utilisait FlatMap pour exécuter consécutivement deux opérations Single<Void>. Parce qu'il a utilisé un FlatMap, le second Future n'a pas été créé avant la fin du premier. Comment puis-je obtenir ce comportement dans RxJava 2?

Répondre

2

Vous pouvez utiliser le même modèle de 1.x RxJava mais aussi reporter la création du second futur:

public Completable getSecondCompletable() { 
    return Completable.defer(() -> Completable.fromFuture(getSecondFuture())); 
}