2015-09-25 28 views
5

也許我忽視了操作符的簡單組合(或RxJava的固有取消行爲)。但是,假設我有一個熱門的可觀察的selectedItem,它可以平滑地映射到RxJava-JDBC查詢。RxJava-如何背壓平面地圖()

@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()); 
} 

我怎樣才能背壓flatMap()運營商因此會一直只執行最新的查詢(並取消所有以前的)。我有點想backpressured flatMap運營商做這樣的事情,其中​​的「X」表示前面的查詢

enter image description here

有沒有辦法做到這一點的取消?或者它可以已經完成,我只是沒有看到它?

回答

6

聽起來像你需要switchMap()而不是flatMap()

通過應用一個函數來返回一個新的Observable,該函數提供給源Observable發出的每個項目,該Observable返回一個Observable,然後發出這些Observables最近發出的項目。

enter image description here

相關問題