2015-10-21 6 views
9

Ich arbeite an einem Android-Projekt, das Anfragen durch Retrofit mit RX-Java beobachtbar macht und abonnieren.Wie kann man eine reaktive Nachrüstanforderung in Java entprellen?

In einigen Interaktionen kann diese Anfrage jedoch mehrfach aufgerufen werden und ich möchte nur die letzte in einem vordefinierten Zeitfenster ausführen (debounce).

Ich versuchte, den debounce Operator direkt auf die beobachtbaren bewerben, aber es wird nicht funktionieren, weil der Code unterhalb jedes Mal eine Wechselwirkung auftritt ausgeführt wird:

mApi.getOnlineUsers() 
    .debounce(1, TimeUnit.SECONDS) 
    .subscribe(...) 

ich es sollte nur eine beobachtbare erstellt werden erraten und Bei jeder Interaktion sollte die Ausführung an dieselbe Observable "angehängt" werden. Aber ich bin irgendwie neu auf Rx Java und weiß nicht genau, was ich tun soll.

Danke!

Antwort

8

Angenommen, Sie möchten eine Ausführung aufgrund eines Triggerereignisses starten.

Observable<Event> trigger = ... // e.g. button clicks 

Sie können die Trigger-Ereignisse, um Anrufe an Ihre API wie diese Transformation:

trigger 
    .debounce(1, TimeUnit.SECONDS) 
    .flatMap(event -> mApi.getOnlineUsers()) 
    .subscribe(users -> showThemSomewhere(users)); 

Beachten Sie auch, dass die debounce Betreiber die letzten Vorkommen innerhalb des Zeitrahmens nehmen, aber throttlefirst werden nimm die zuerst. Je nach Anwendungsfall möchten Sie vielleicht das eine oder das andere verwenden.

+0

Guter Punkt, und Sie könnten auch in Betracht ziehen, [PublishRelay] (https://github.com/JakeWharton/RxRelay) – miroslavign

Verwandte Themen