Rx java RxJava2:如何改进并行数据下载和缓存?
我正在努力通过RxJava2。我想知道我的解决方案是否可以接受,或者是否有改进的方法 用例Rx java RxJava2:如何改进并行数据下载和缓存?,rx-java,rx-java2,Rx Java,Rx Java2,我正在努力通过RxJava2。我想知道我的解决方案是否可以接受,或者是否有改进的方法 用例 用户按下更新数据按钮 将显示一个对话框-请稍候 并行处理多个后端调用 一旦这些操作完成,数据就会保存在本地数据库中 在完成所有请求(后端调用和持久化)后,应取消该对话框 当前解决方案 我有几个完整表,如下所示: Completable organisationUnitCompletable = backendService.getOrganisationUnits() .doOnNext(data
完整表
,如下所示:
Completable organisationUnitCompletable = backendService.getOrganisationUnits()
.doOnNext(data -> organisationUnitDao.saveInTx(data))
.ignoreElements()
.subscribeOn(Schedulers.io());
Completable locationCompletable = backendService.getLocations()
.doOnNext(data -> locationDao.saveInTx(data))
.ignoreElements()
.subscribeOn(Schedulers.io());
Completable prioritiesCompletable = backendService.getPriorities()
.doOnNext(data -> priorityDao.saveInTx(data))
.ignoreElements()
.subscribeOn(Schedulers.io());
private <T> Completable prepareCompletable(Function<Void, Observable<List<T>>> source, AbstractDao<T, Long> dao) {
Completable orderTypeCompletable = source
.doOnNext(data -> dao.saveInTx(data))
.ignoreElements()
.subscribeOn(Schedulers.io());
}
我通过添加到列表并使用merge
运算符将它们打包为一个:
List<Completable> compatibles = new ArrayList<>();
compatibles.add(organisationUnitCompletable);
compatibles.add(locationCompletable);
compatibles.add(prioritiesCompletable);
Completable.merge(compatibles)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(() -> {
progressDialog.dismiss();
});
有没有办法将其提取到一种方法中?我试过这样的方法:
Completable organisationUnitCompletable = backendService.getOrganisationUnits()
.doOnNext(data -> organisationUnitDao.saveInTx(data))
.ignoreElements()
.subscribeOn(Schedulers.io());
Completable locationCompletable = backendService.getLocations()
.doOnNext(data -> locationDao.saveInTx(data))
.ignoreElements()
.subscribeOn(Schedulers.io());
Completable prioritiesCompletable = backendService.getPriorities()
.doOnNext(data -> priorityDao.saveInTx(data))
.ignoreElements()
.subscribeOn(Schedulers.io());
private <T> Completable prepareCompletable(Function<Void, Observable<List<T>>> source, AbstractDao<T, Long> dao) {
Completable orderTypeCompletable = source
.doOnNext(data -> dao.saveInTx(data))
.ignoreElements()
.subscribeOn(Schedulers.io());
}
private Completable prepareCompletable(函数源,AbstractDao){
Completable orderTypeCompletable=源
.doOnNext(数据->dao.saveInTx(数据))
.ignoreElements()
.subscribeOn(Schedulers.io());
}
在这里,我将把可观察到的和刀放入。当然,它不会编译。它似乎需要比我已经拥有的更多的关于泛型的知识
对不起,问题太长了,很难用几句话来解释整个用例
我真的必须将subscribeOn(Schedulers.io())添加到每个Completable吗
是的,但是在Completable.merge()之后不需要它
有没有办法将其提取到一种方法中
公共静态函数applyIgnore(){
返回f->f.ignoreElements().subscribeOn(Schedulers.io());
}
Completable locationCompletable=backendService.getLocations()
.doOnNext(数据->位置dao.saveInTx(数据))
.to(applyIgnore());
这是一个清晰的问题。谢谢