作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我对如何在 RxJava 中实现它感到困惑。我愿意
我知道如何通过首先从数据库加载所有对象并创建一个像这样的 Observable.fromIterable(allMyDbObjects)
的 Observable
来做到这一点,但是我想一次取一个对象,以防数据库在我上传时更新。我不知道该怎么做。我看过 repeatUntil
但它似乎只是立即重复。这是我在想什么的伪代码:
getFirstDbObject()
.flatMapCompletable { obj ->
upload(obj)
.doOnComplete {
deleteFromDb(obj)
}
}
.repeatUntil {
// dbIsEmptyLogic.
// This doesn't work. I need to somehow call getFirstDbObject() again
}
有人能帮忙吗?
最佳答案
假设 getFirstDbObject()
返回一个 Maybe,您可以通过将结果映射到 bool 值(true
如果数据库为空,false
如果没有)然后重复序列直到 getFirstDbObject()
返回空并且流完成。
getFirstDbObject()
.toObservable()
.flatMapSingle { obj ->
upload(obj)
.doOnComplete { deleteFromDb(obj) } // probably better to use .andThen(deleteFromDb(obj)) if delete also returns a completable
.toSingleDefault(false)
}
.defaultIfEmpty(true)
.repeat()
.takeUntil { isComplete ->
isComplete
}
关于android - Rxjava while循环获取数据库对象并上传到服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56879412/
我是一名优秀的程序员,十分优秀!