RxJava-如何反压平面图()

时间:2015-09-25 15:31:36

标签: java reactive-programming rx-java

也许我忽略了一个简单的运算符组合(或者RxJava的固有取消行为)。但是假设我有一个热的可观察selectedItem平面映射到RxJava-JDBC查询。

@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()运算符进行反压,以便它始终只执行最新的查询(并取消之前的任何查询)。我有点想要一个背压平面运算符来做这样的事情,其中​​&#34; X&#34;表示取消上一个查询

enter image description here

有没有办法实现这个目标?或者它可以完成,我只是没有看到它?

1 个答案:

答案 0 :(得分:7)

听起来您需要switchMap()而不是flatMap()

  

通过应用一个函数返回一个新的Observable,该函数提供给返回Observable的源Observable发出的每个项目,然后发出这些Observable最近发出的项目。

enter image description here