2017-06-29 6 views
0

.doOnSubscribe() wird ausgeführt vor ein beobachtbarer Teilnehmer ist beigefügt.RxJava - .doAfterSubscribe()?

Ich brauche einen Nebeneffekt auszuführen nach der Teilnehmer angeschlossen ist. Ist das möglich?

Antwort

2

Verwenden Zusammensetzung der Ströme etwas vor der "eigentlichen Arbeit" auszuführen:

Observable source = ... // the actual flow 

source.startWith(
    Observable.empty() 
    .doOnCompleted(() -> { /* your initial side-effect here */ }) 
) 
.subscribe(/* consume the events of source */); 
+0

hinweis - '.concatWith()' didn' t arbeiten, aber '.mergeWith()' tat. Vielen Dank! Mein Anwendungsfall ist, dass die Quelle ein 'Relay' ist und der Nebeneffekt es mutiert. "hat nicht funktioniert" bedeutet, dass der Teilnehmer aufgrund des Nebeneffekts keine Abstrahlung vom Relais erhalten hat – ZakTaccardi

+0

Ah, ich dachte 'startWith'. – akarnokd

+0

@ZakTaccardi Ich schaue mir das ein bisschen an. Der Grund, warum ich 'startWith' und' concatWith' nicht funktioniere, ist, dass 'startWith' ebenfalls' concat' ist. Das wird deine Aufnahme verzögern, nachdem deine Nebenwirkungen erledigt sind. Aber Sie müssen etwas tun, nachdem Ihr Downstream bereits eingerichtet ist. 'mergeWith()' löse dies. –

0

Der Operator doOnSubscribe wird im Abonnement ausgeführt. Es kann nicht gesagt werden, dass doOnSubscribe vor dem Abonnement oder nach dem Abonnement ausgeführt wird.

+0

> ausgeführt wird onSubscription rechts. Ich abonniere ein 'PublishSubject', und ich möchte einen Nebeneffekt auslösen, der 'publishSubject.onNext()' aufruft und der Abonnent die Emission empfängt ... – ZakTaccardi