我是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
呢?
2条答案
按热度按时间oxf4rvwz1#
不知道你是否仍然有这个问题,但通常对于Single-〉Completable-〉Completable,你会这样做:
dwthyt8l2#
Single
-〉Completable
-〉Completable
的演示,我认为主要的事情是在第一个Completable
之后链接一个Single
,它返回原始Single
的值。这将使链看起来像:
Single "value 1" -> Completable -> Single "value 1" -> Completabe
,这将使最后一个子句flatMapCompletable
访问原始的value 1
,因此我们可以决定在最后使用哪个Completable
。