2015-09-25 7 views
5

おそらく、私は演算子の単純な組み合わせ(またはRxJavaの本質的なキャンセル動作)を見落としているかもしれません。しかし、私はRxJava-JDBCクエリにフラット・マップするという熱い観測可能性があるとします(selectedItem)。それは常にだけで、最新のクエリを実行(およびそれ以前のキャンセル)しますので、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()オペレータを背圧することができます。私は一種の「X」は

enter image description here

前のクエリの取り消しを示し、このような何かを、実行するバックプレッシャflatMap演算子はこれを実現する方法はありますしたいですか?それとも、すでに成し遂げられていて、私はそれを見ていないのですか?

答えて

6

flatMap()の代わりにswitchMap()が必要です。

あなたが観測を返し観察可能なソースから放出された各項目に供給関数を適用した後、最近これらの観測量放出されることにより、放出されたアイテムを放出することにより、新しい観測を返します。

enter image description here

関連する問題