【发布时间】:2019-12-18 00:59:22
【问题描述】:
我目前正在为我的第一个更复杂的 rx 链而苦苦挣扎,也许你可以帮助我。 我有一个对象列表,我从 api 调用中获得。我需要检查它们是否在本地存在,如果存在,则更新数据集,如果不创建它们。我目前的做法是这样的:
private fun insertUpdateFromServer(objectsToInsert: List<Model>): Completable {
return Observable.fromIterable(objectsToInsert).flatMapCompletable { atl ->
dao.getByServerId(atl.id).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())
.switchIfEmpty { obs: SingleObserver<in Model> -> createNewObject(atl) }.flatMapCompletable {
updateObject(atl, it).applySchedulers()
}
}
重要的是,我必须等待所有子任务完成。如果我只有要更新的对象,这是可行的,但是如果有一个新对象,整个事情就不会完成。
请注意,我只对操作完成感兴趣,发出的对象对我来说并不重要。函数“getByServerId”返回一个 Maybe。
所以我问你是否能指出我的逻辑错误并把我推向正确的方向,提前谢谢!
【问题讨论】:
标签: android kotlin rx-java2 android-room rx-android