如何连锁"单一 - 完整 - 可完成"在rxkotlin?

时间:2017-08-03 16:34:05

标签: android rx-java2 reactivex rx-kotlin

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

我需要在序列中处理三个不同的异步调用。 问题是,第一步返回Single<LocationResult>,第二步返回Completable,第三步再返回Completable

(单一 - &gt;可完成 - &gt;可完成)

问题是,最后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)
                })

这个approch是正确的方法吗?

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

1 个答案:

答案 0 :(得分:0)

不知道你是否还有这个问题,但通常是单一&gt;可完成 - &gt;可以完成:

val disposable = service.getSingleResult()
                        .flatMapCompletable { locationResult ->
                            callReturningCompletable(locationResult)
                        }
                        .andThen { finalCompletableCall() }
                        .subscribe({...}, {...})