使用RxJava操作,如果上游发出新项,是否可以“忽略”已在下游处理的元素?
例如
Observable.create(...)
.flatMap(...) // 30 seconds to process (Asynchronous)
.flatMap(...) // 30 seconds to process (Asynchronous)
etc...
我需要实现的是,如果上游通知新项目它将取消当前正在运行的流上的任何操作,即使下游在其他线程中执行异步操作。
答案 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
。