RxJava异步去抖动

时间:2018-04-26 15:23:40

标签: rx-java

使用RxJava操作,如果上游发出新项,是否可以“忽略”已在下游处理的元素?

例如

Observable.create(...)
  .flatMap(...) // 30 seconds to process (Asynchronous)
  .flatMap(...) // 30 seconds to process (Asynchronous)
  etc...

我需要实现的是,如果上游通知新项目它将取消当前正在运行的流上的任何操作,即使下游在其他线程中执行异步操作。

1 个答案:

答案 0 :(得分:1)

您可以使用switchMap()代替switchMap()运算符。当在Observable.create( ... ) .switchMap( value -> getObservable1( value ) .switchMap( value2 -> getObservable2( value2 ) ) ... 中收到新值时,旧的observable被取消订阅并且订阅了替换的observable。

switchMap()

如果您希望下游的观察者也被取消,您将必须传播getObservable1( value )。在上面的代码中,观察链第一阶段的发射将取消订阅getObservable2( value2 )Enum.max_by/3