2017-09-27 8 views
0

Pourquoi RxJava n'exécutera-t-il pas la troisième version complète (completable3) si elle est ajoutée après une condition?Chaîne pouvant être remplie conditionnellement

J'ai remarqué que ce n'est pas le seul cas où la chaîne semble être cassée, donc je voudrais savoir la raison sous-jacente pour laquelle le code suivant ne s'exécutera pas comme prévu.

Completable chain = completable1 
    .andThen(completable2); 

if(condition) 
    chain.andThen(completable3); 

chain.subscribe(); 

Je sais que je pouvais faire quelque chose comme:

completable1 
    .andThen(completable2); 
    .andThen(Completable.defer(() => { 
     if(condition) 
      return completable3; 
     else 
      return Completable.complete(); 
    })) 
    .subscribe(); 

Répondre

1

Les opérateurs RxJava renvoient une nouvelle instance que vous devez continuer à composer, donc, en ignorant les retournés Completable résultats dans un no-op. Vous avez fait la bonne chose dans votre deuxième exemple. Pour le premier exemple, vous pouvez remplacer la référence de la chaîne avec l'instance modulée retournée par andThen:

Completable chain = completable1 
    .andThen(completable2); 

if (condition) { 
    chain = chain.andThen(completable3); 
} 

chain.subscribe(); 
+0

Je me sens si mal pour ne pas le voir. Merci! – ingkevin