2017-09-14 95 views
0

这里是我想要做的(使用科特林和RxJava)如何有条件地在RxJava流中添加异步操作?

makeServerCall() 
       .doOnNext { 
        doStuff(it) 
       } 
       //TODO: if it == 0, call asyncOperation() and wait for its callback to fire 
       //before running the rest of the stream. Otherwise immediately run the rest 
       //of the stream 
       .flatMap { 
        observable1(it) 
        observable2(it) 
        Observable.merge(
          getSpotSearchObservable(observable1), 
          getSpotSearchObservable(observable2) 
       } 
       .subscribeBy(onNext = { 
       allDone() 
        view? 
       }) 

如何在呼叫挤asyncOperation(),使流等待其余为它的回调火的简化版本,但只有当某个条件得到满足时?这似乎可能是Rx中的一个微不足道的操作,但没有想到明显的解决方案。

+1

你认为'switchIfEmpty'?当'it == 0'时,如果你不再需要它以后进行操作,那么你可以切换到另一个可观察的流(asyncOperation) – Jon

回答

2

FlatMap it!

.flatMap { 
    if (it == 0) { 
     [email protected] asyncOperation() 
      .ignoreElements() 
      .andThen(Observable.just(0)) 
    } 
    [email protected] Observable.just(it) 
} 
.flatMap { 
    observable1(it) 
    observable2(it) 
    Observable.merge(
     getSpotSearchObservable(observable1), 
     getSpotSearchObservable(observable2) 
    ) 
}