我是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
?
答案 0 :(得分:0)
不知道你是否还有这个问题,但通常是单一&gt;可完成 - &gt;可以完成:
val disposable = service.getSingleResult()
.flatMapCompletable { locationResult ->
callReturningCompletable(locationResult)
}
.andThen { finalCompletableCall() }
.subscribe({...}, {...})