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

この記事からわかること

  • Android Studio/KotlinRxJava使い方
  • CompletableandThenメソッドの使い方
  • 非同期処理順番実行するには?

index

[open]

\ アプリをリリースしました /

みんなの誕生日

友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-

posted withアプリーチ

環境

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)
  1. 処理開始
  2. 3秒後
  3. completable1:実行
  4. completable1:完了
  5. 2秒後
  6. completable2:実行
  7. completable2:完了
  8. 4秒後
  9. completable3:実行
  10. completable3:完了
  11. 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)

まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。

ご覧いただきありがとうございました。

searchbox

スポンサー

ProFile

ame

趣味:読書,プログラミング学習,サイト制作,ブログ

IT嫌いを克服するためにITパスを取得しようと勉強してからサイト制作が趣味に変わりました笑
今はCMSを使わずこのサイトを完全自作でサイト運営中〜

New Article

index