2017-09-14 10 views
0

は、私がasyncOperation()への呼び出しに絞ると、火災にそのコールバックのストリーム待ちの残りの部分を作るにはどうすればよい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? 
       }) 

(KotlinとRxJavaを使用して)私は何をしようとしているの簡易版です特定の条件が満たされている場合のみ?これはおそらく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) 
    ) 
} 
関連する問題