首页 > 解决方案 > 使用 RxJava 使用不同的参数多次重复请求

问题描述

我需要逐页从服务器加载一些数据,直到所有数据都加载完毕。如果在某些时候我收到的项目少于我请求的项目,则认为数据已完全加载。这是我现在拥有的工作解决方案:

return Observable.fromCallable { 0 }
        .delay(500, TimeUnit.MILLISECONDS)
        .repeat()
        .scan { previousPage, _ -> previousPage + 1}
        .concatMap { doLongFetch(it) }
        .takeUntil { it.size < 100 }

fun doLongFetch(page: Int): Observable<List<ListItem>>() {
    //Here I do the loading
}

但是,源 observable 存在问题。如您所见,它每 500 毫秒发出一次新值,以为扫描功能提供一些输入。延迟是必需的,否则它会在很短的时间内发出数千个值,这根本不需要。理想情况下,我想完全消除这种延迟,并确保源 observable 仅在下游处理了前一个值之后才发出另一个值(这意味着数据已被请求和处理)。

关于我如何做到这一点的任何想法?

标签: kotlinrx-java

解决方案


推荐阅读