如何在 rxkotlin 中链接“单一 - 可完成 - 可完成”?

App*_*pyx 5 android rx-kotlin reactivex rx-java2

我是 rxjava/rxkotlin/rxandroid 的初学者。

我需要按顺序处理三个不同的异步调用。问题是第一步返回 a Single<LocationResult>,第二步返回 a Completable,第三步返回 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)
                })
Run Code Online (Sandbox Code Playgroud)

这种方法是正确的方法吗?

我应该如何处置Completeables?一般我应该什么时候处置Observables

And*_*w G 1

不知道您是否仍然遇到此问题,但通常对于 Single->Completable->Completable 您会这样做:

val disposable = service.getSingleResult()
                        .flatMapCompletable { locationResult ->
                            callReturningCompletable(locationResult)
                        }
                        .andThen { finalCompletableCall() }
                        .subscribe({...}, {...})
Run Code Online (Sandbox Code Playgroud)