2017-07-18 1 views
2

Le code suivant émet des éléments de observable1 seulement après observable2 est terminée.RxJava startwith délicat (Observable)

observable1.startWith(observable2) 
      .subscribe() 

J'ai besoin pour obtenir un autre comportement

observable1 ->  0 1 2 3 
observable2 -> 1 2 3 4 5 6 

observable1.startWithDefault(observable2) 
      -> 1 2 0 1 2 3 

Le second éléments de observables que tout émet des première observable est vide et articles de première sont emited.

Je ne pouvais pas trouver une solution correcte en utilisant uniquement des opérateurs de base, ce qui est correct RxJava 2 la mise en œuvre de l'opérateur sur mesure startWithDefault devrait ressembler?

P.S.

observable1.subscribe() 
observable2.takeUntil(observable1).subscribe() 

n'est pas bonne solution en raison de la race en cas d'emit immédiate de observable1

Répondre

4

La direction était bonne, mais vous avez besoin publish(Function) de partager des signaux de » observable1 et concatEager de ne pas perdre des éléments de celle-ci lorsque la commutateur appens:

observable1.publish(o -> 
    Observable.concatEager(observable2.takeUntil(o), o) 
) 
.subscribe(...)