在一个活动中,我需要调用4 rest。一个API不依赖于另一个API。但是为了计算,我需要所有4个API的数据。因此,我计划调用API异步,但等待所有API完成加载。我正在用RxAndroid进行改装。我不知道如何使用rx来实现这一点。我不想对每个API调用使用布尔值来跟踪它是否加载。有什么rx路吗?
现在,我将所有调用同步如下
样本代码:
fun getData() {
val disposable = dataSource.getLivePayments()
.subscribeOn(schedulerProvider.io())
.observeOn(schedulerProvider.ui())
.subscribe(({ livePayments: List<Payment> ->
this.livePayments.clear()
this.livePayments.addAll(livePayments)
dataSource.getLiveRemittances()
.subscribeOn(schedulerProvider.io())
.observeOn(schedulerProvider.ui())
.subscribe(({ liveRemittances: List<Remittance> ->
this.liveRemittances.clear()
this.liveRemittances.addAll(liveRemittances)
// similarly called dataSource.getLiveTimeSheets()
// and dataSource.getArchiveTimeSheets()
// synchronous
// then call
calculateAmount()
}), ({ t -> this.parseError(t) }))
}), ({ t -> this.parseError(t) }))
compositeDisposable.add(disposable)
}
fun calculateAmount() {
val balance = if(liveRemittances.isNotEmpty()) {
(sum(payment.amount) - sum(timesheet.amount)) * sum(liveRemittance.amount)
} else {
(sum(payment.amount) - sum(timesheet.amount))
}
}NB:在这个过程中,如果某个API失败,它将停止执行下一个API,但我希望它应该调用next API。
发布于 2018-03-25 12:11:57
如果所有API调用都是独立的,则可以使用zip操作符:
Single.zip(single1, single2, ..., (result1, result2, ... -> (combine the results)})如果有依赖结果,则可以使用flatMap
single1.flatMap(result -> (generate a new Single based on that result)})https://stackoverflow.com/questions/49475625
复制相似问题