4

私は rxjava/rxkotlin/rxandroid の初心者です。

シーケンスで 3 つの異なる非同期呼び出しを処理する必要があります。問題は、最初のステップが a を返しSingle<LocationResult>、2 番目のステップが a を返しCompletable、3 番目のステップが再び a を返すことCompletableです。

(シングル -> コンプリート可能 -> コンプリート可能)

問題は、最後Completableが最初のデータに依存することですSingle

私の現在の解決策:

これは悪い解決策だと思いますが、これを正しく行う方法がわかりません。

val ft = FenceTransaction(applicationContext, apiClient)
        stream
            .flatMap { locationResult ->
                ft.removeAll()
                return@flatMap ft.commit().toSingle({ return@toSingle locationResult })
            }
            .flatMapCompletable {
                ft.recycle()
                ft.setZone(it.location.longitude, it.location.latitude, ZONE_RADIUS)
                val dots = DotFilter().getFilteredDots()
                for (dot in dots) {
                    ft.addDot(dot)
                }
                return@flatMapCompletable ft.commit()
            }
            .subscribeBy(
                onComplete = {
                    "transaction complete".logi(this)
                },
                onError = {
                    "transaction error".logi(this)
                })

このアプローチは正しい方法ですか?

そして、どのように処分すればよいCompleteablesですか?一般的にいつ処分すればいいObservablesですか?

4

1 に答える 1