【Kotlin/Android】RxJavaのandThenメソッドの使い方!順番に処理する方法

この記事からわかること
- Android Studio/KotlinでRxJavaの使い方
Completable
のandThenメソッドの使い方- 非同期処理を順番に実行するには?
index
[open]
\ アプリをリリースしました /
環境
- Android Studio:Flamingo
- Kotlin:1.8.20
Operator:andThenメソッドの使い方
RxJavaのCompletable
で使用できるOperatorのandThen
は非同期処理を順番に処理するためのメソッドです。「非同期処理Aの完了後に非同期処理Bを実行したい」場合などCompletable
を直列に繋げたい場合に使用します。Observable
の場合はconcatWith
メソッドが同じ役割になります。
完了後に実行したい非同期処理をandThen
メソッドの引数に渡します。
Log.i("RxJava", "処理開始")
var completable1 = Completable.timer(3, TimeUnit.SECONDS)
var completable2 = Completable.timer(2, TimeUnit.SECONDS)
completable1
.andThen(completable2)
.subscribeBy(
onComplete = {
Log.i("RxJava", "2つとも完了したよ")
}
).addTo(compositeDisposable)
例えば上記の場合は「処理開始」が出力された5秒後(2つの処理が完了後)に「2つとも完了したよ」が出力されることになります。andThen
メソッドにCompletable
を渡した場合はさらにメソッドチェーンで複数のCompletable
を掛け合わせて実装することも可能です。
Log.i("RxJava", "処理開始")
var completable1 = Completable.timer(3, TimeUnit.SECONDS)
var completable2 = Completable.timer(2, TimeUnit.SECONDS)
var completable3 = Completable.timer(4, TimeUnit.SECONDS)
completable1
.andThen(completable2)
.andThen(completable3)
.subscribeBy(
onComplete = {
Log.i("RxJava", "3つとも完了したよ")
}
).addTo(compositeDisposable)
- 処理開始
- 3秒後
- completable1:実行
- completable1:完了
- 2秒後
- completable2:実行
- completable2:完了
- 4秒後
- completable3:実行
- completable3:完了
- 3つとも完了したよ
異なる非同期処理を渡す
andThen
メソッドの引数に渡す非同期処理はCompletable
以外でも問題ありませんが、Completable
以外にすると続けてandThen
メソッドは使用できなくなるので注意してください。
var completable1 = Completable.timer(3, TimeUnit.SECONDS)
val observable1 = Observable.just("1")
completable1
.andThen(observable1) // これ以降はandThenメソッドは使えない
.subscribe {
Log.i("RxJava", it)
}.addTo(compositeDisposable)
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。