android - 如何在调用 doOnComplete 之前等待完成 doOnNext 中的所有任务?
问题描述
只是问我做的是否正确,因为我不知道为什么在尚未完成doOnComplete
时调用?doOnNext
所以这就是为什么,我问的是如何doOnNext
在调用doOnComplete
?
内部的另一个任务doOnNext
是将数据插入数据库。
private val disposable = CompositeDisposable()
val branchUser : Observable<BranchUserResponse> = getApi().getBranchUser()
val areaUser : Observable<AreaUserResponse> = getApi().getAreaUser()
val regionalUser : Observable<RegionalUserResponse> = getApi().getRegionalUser()
disposable.add(
Observable.merge(branchUser, areaUser, regionalUser)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.doOnNext { it ->
when (it) {
is BranchUserResponse -> {
branchUserViewModel.addAll()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(
{
Log.i(TAG, "addAll success")
// the doOnComplete is already called before the Log here is call.
// Same with the other condition.
// What I want is to call this first before the doOnComplete or doFinally.
},
{
Log.e(TAG, "addAll failed", it)
}
)
}
is AreaUserResponse -> {
// some stuff here...
}
is RegionalUserResponse -> {
// some stuff here...
}
}
}
.doOnComplete {
Log.i(TAG, "Complete")
}
.doFinally {
Log.i(TAG, "Finally")
}
.subscribe()
)
任何帮助表示赞赏,谢谢。
解决方案
如果要rx-stuff
在指定的所有分支中执行,doOnNext
则必须更改doOnNext
为flatMap
:
private val disposable = CompositeDisposable()
val branchUser : Observable<BranchUserResponse> = getApi().getBranchUser()
val areaUser : Observable<AreaUserResponse> = getApi().getAreaUser()
val regionalUser : Observable<RegionalUserResponse> = getApi().getRegionalUser()
disposable.add(
Observable.merge(branchUser, areaUser, regionalUser)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.flatMap { it ->
when (it) {
is BranchUserResponse -> {
branchUserViewModel.addAll()
}
is AreaUserResponse -> {
// some stuff here...
}
is RegionalUserResponse -> {
// some stuff here...
}
}
}
.doOnComplete {
Log.i(TAG, "Complete")
}
.doFinally {
Log.i(TAG, "Finally")
}
.subscribe()
)
推荐阅读
- sql - Big Query-如何在 Big Query 中按浏览量、用户每周比较数据
- jmeter - 在非 GUI 模式下运行 jmeter 测试时,不使用属性文件中的属性
- reactjs - 从 graphql useQuery 检索的数据未显示在子组件中,但在 state 和 props 中可用
- java - Eclipse 抛出“由于连接到 Gradle 构建时出错,将 Gradle 项目与工作区同步失败。”
- list - 从选项列表中获取值列表
- git - 拒绝所有 git repos 的 Github 权限
- python - 如何从时区获取 UTC?
- magento - Magento2:管理员中的 UI 选择和搜索下拉值依赖项
- python - 训练历史与验证历史非常相似是否可以?
- python - 使用活页夹解决 jupyter notebook 中找不到的模块