Mi chiedo se esiste un modo per comporre gli operatori esistenti per eseguire l'opposto di switchMap()
.RxJava - Di fronte all'operatore switchMap()?
Il switchMap()
insegue l'ultima emissione ricevuta e annulla qualsiasi Observable
precedentemente in esecuzione. Diciamo che l'ho capovolto, e voglio ignorare tutte le emissioni che arrivano a un operatore xxxMap()
mentre è occupato con la prima emissione ricevuta. Continuerà a ignorare le emissioni finché non avrà finito di emettere l'attuale Observable
al suo interno. Quindi elaborerà la prossima emissione che riceve.
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));
C'è un modo per realizzare questo? Nell'esempio di cui sopra, se intensiveProcess()
dovesse durare tre secondi, il ignoreWhileBusyMap()
sarebbe elaborare 0
ma probabilmente ignorano le emissioni 1
e 2
provenienti da interval()
.E sarebbe quindi elaborare 3
ma probabilmente ignorare 4
e 5
, e così via ...
Impressionante, ho fatto qualcosa di simile con un 'semaforo' ma speravo di usare una composizione puramente reattiva con gli operatori esistenti. Suppongo di poter avvolgere tutto questo in un 'Transformer' però. – tmn
Utilizzare un trasformatore differito per evitare la condivisione del gate tra più sottoscrittori finali. – akarnokd
Ho appena realizzato che la tua soluzione non è block-y come la mia, quindi passerò a questa. Grazie! – tmn