使用RxJava改进多(三)个Completables的链接



我想调用一个又一个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")
})
)
}

使用FlatMap进行链式api调用。它将像

firstApi.getData()
.flatmap(dataFromApi1 -> return secondApi.getData())
......
......

查看此媒体博客以获得更好的理解。

编辑:

对于Completable,您可以使用andThen运算符。

firstCompletable
.andThen(secondCompletable)

请检查这个答案。

根据这个答案:

一般来说,这个运算符是一个"替换";上的flatMap复杂度:

相关内容

  • 没有找到相关文章

最新更新