【发布时间】:2022-01-23 12:37:51
【问题描述】:
我想一个接一个地调用 Completable。也就是说,当第一个完成时,调用第二个,当第二个完成时,调用第三个。我已经尝试过一些不同的东西,比如 andThen(),但发现它不会“等待”之前的 Completable 完成,因为它是并行运行的。到目前为止,这就是我所发现的,它可以按我的意愿工作,但是有没有更好的方法来改进它。有没有什么操作函数或者什么东西可以在每个阶段去掉Completable.defer?
这是迄今为止的工作示例:
private fun invokeAllThreeDoSomeLogic() {
disposable.add(Completable.concatArray(
Completable.defer {
firstApi.getData().doOnError { t: Throwable? ->
Timber.w(
t,
"first error"
)
}
},
Completable.defer {
Completable.fromObservable(secondApi.getData()
.doOnError { t: Throwable? ->
Timber.i(
t,
"Second error"
)
}
},
Completable.defer {
thirdApi.refresh().doOnError { t: Throwable? ->
Timber.i(
t,
"Third error"
)
}
}
).subscribe(
{ },
{ t: Throwable? ->
Timber.w(t, "something went wrong")
})
)
}
【问题讨论】: