【问题标题】:How to chain "Single - Completeable - Completable" in rxkotlin?如何在 rxkotlin 中链接“Single - Completeable - Completable”?
【发布时间】:2017-08-03 16:34:05
【问题描述】:

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

我需要依次处理三个不同的异步调用。 问题是第一步返回Single<LocationResult>,第二步返回Completable,第三步返回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

【问题讨论】:

    标签: android rx-java2 reactivex rx-kotlin


    【解决方案1】:

    不知道你是否还有这个问题,但通常对于 Single->Completable->Completable 你会这样做:

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

    【讨论】:

    • 谢谢,但我问如何从最后一个可完成后的第一首单曲中获得结果
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-10
    相关资源
    最近更新 更多