Ich frage mich, ob es eine Möglichkeit gibt, bestehende Operatoren zu komponieren, um das Gegenteil von switchMap()
durchzuführen.RxJava - Gegenteil von switchMap() Operator?
Die switchMap()
wird nach der letzten Emission jagen, die sie erhält, und alle Observable
löschen, die sie zuvor ausgeführt hat. Nehmen wir an, ich habe es umgedreht, und ich möchte alle Emissionen ignorieren, die zu einem Operator kommen, während er mit der ersten empfangenen Emission beschäftigt ist. Es wird die Emissionen ignorieren, bis es den aktuellen Observable
innerhalb davon ausstößt. Dann verarbeitet es die nächste Emission, die es empfängt.
Observable.interval(1, TimeUnit.SECONDS)
.doOnNext(i -> System.out.println("Source Emitted Value: " + i))
.ignoreWhileBusyMap(i -> doIntensiveProcess(i).subcribeOn(Schedulers.computation()))
.subscribe(i -> System.out.println("Subscriber received Value: " + i));
Gibt es eine Möglichkeit, dies zu erreichen? In dem obigen Beispiel, wenn intensiveProcess()
waren drei Sekunden dauern, würde die ignoreWhileBusyMap()
0
verarbeiten aber wahrscheinlich Emissionen 1
und 2
von interval()
kommen ignorieren würde .Es dann 3
verarbeitet aber wahrscheinlich ignorieren 4
und 5
, und so weiter ...
Awesome, ich habe etwas Ähnliches mit einem 'Semaphore' gemacht, aber ich hatte gehofft, eine rein reaktive Zusammensetzung mit existierenden Operatoren zu verwenden. Ich nehme an, ich könnte das alles in einem 'Transformer' verpacken. – tmn
Verwenden Sie einen verzögerten Transformator, um zu vermeiden, dass das Gate über mehrere Endteilnehmer verteilt wird. – akarnokd
Habe gerade gemerkt, dass deine Lösung nicht so blockhaft ist wie meine, also wechsle ich dazu. Vielen Dank! – tmn