RxJavaで一つ前の川で受信用のobservableをflatmapとかで設定して、その直後で送信処理するみたいな事書きたいけど出来るのかな。。?逆にすると送信処理した直後にデータ送られて来たら、それを取りこぼしちゃうみたいな。。。
— ぼいらー (@mapyo) 2017年5月24日
こういう事がしたかった。
doAfterNextを使うと解決出来そうだった。サンプルコードはこちら publishSubject.onNextのとこらへんで送信開始処理みたいなのを行うイメージ
val publishSubject = PublishSubject.create<Int>() Observable.just(1) .doAfterNext { println("doAfterNext") publishSubject.onNext(it * 2) } .flatMap { println("receive start") publishSubject } .subscribe({ println(it) })
出力結果はこちら
receive start doAfterNext 2
- flatMapでpublishSubjectが設定される
- その後doAfterNextが呼ばれて、publishSubjectで1 * 2が流される
- subscribeしてるところで2がとれる
という事で無事に出来ました。もうちょっと早く気がついてたらもっといい川を書けてたかもしれない。