我对rxJava相当陌生,尝试自己的东西。我希望得到一些建议,如果我做对了。RxJava:如何等待所有订阅完成?
用例:在我的应用程序的第一次运行中,成功登录后,我必须下载并保存在本地数据库中的多个字典供应用程序运行。用户必须等到下载过程结束。
当前解决方案:我正在使用retrofit 2与rxjava适配器来获取数据。我使用zip operator将所有观察对象捆绑成一个。所有下载完成后,回调触发并保存到数据库中。
没有什么胜于一些代码更好:
Observable<List<OrderType>> orderTypesObservable = backendService.getOrderTypes();
Observable<List<OrderStatus>> orderStatusObservable = mockBackendService.getOrderStatuses();
Observable<List<Priority>> prioritiesObservable = backendService.getPriorities();
return Observable.zip(orderTypesObservable,
orderStatusObservable,
prioritiesObservable,
(orderTypes, orderStatuses, priorities) -> {
orderTypeDao.deleteAll();
orderTypeDao.insertInTx(orderTypes);
orderStatusDao.deleteAll();
orderStatusDao.insertInTx(orderStatuses);
priorityDao.deleteAll();
priorityDao.insertInTx(priorities);
return null;
});
问题:
我应该使用ZIP运营商或者是有一个更好的适合我的原因是什么?
这样做似乎有点凌乱。这只是代码的一部分,我目前有12个字典需要加载。有没有办法重构它?
我想尽快插入一个字典数据完成下载,并把它下载失败重试机制。我怎样才能做到这一点?