2015-09-25 8 views
5

Vielleicht übersehe ich eine einfache Kombination von Operatoren (oder ein inhärentes Aufhebungsverhalten von RxJava insgesamt). Aber angenommen, ich habe eine heiße beobachtbare selectedItem, Flatmap zu einer RxJava-JDBC-Abfrage.RxJava- Wie man eine Flatmap() zurückdrückt

@Test 
public void testFlatMapBackPressure() { 
    Database db = null; //assign db 

    BehaviorSubject<Integer> selectedItem = BehaviorSubject.create(); 

    //can I backpressure the queries so only the latest one is running, and any previous is cancelled? 
    Observable<List<Integer>> currentValues = selectedItem.flatMap(i -> db.select("SELECT VALUE FROM MY_TABLE WHERE ID =?") 
      .parameter(i) 
      .getAs(Integer.class) 
      .toList()); 
} 

Wie kann ich den Gegendruck flatMap() Betreiber so wird es immer nur die letzte Abfrage ausführen (und kündigen, jede vorherige). Ich mag ein bisschen ein Gegendruck flatMap Operator, so etwas zu tun, wo die „X“

enter image description here

Gibt es eine Möglichkeit, eine Löschung der vorherigen Abfrage zeigt dies zu erreichen? Oder kann es schon geschehen und ich sehe es einfach nicht?

Antwort

6

Sounds wie Sie brauchen switchMap() anstelle von flatMap().

Gibt ein neues beobachtbare durch eine Funktion der Anwendung, die Sie jedes Element liefern von der Quelle beobachtbare emittiert, die eine beobachtbare zurückgibt, und dann die Einzelteile durch die zuletzt emittierte dieser Observablen emittiert emittiert.

enter image description here

Verwandte Themen