我對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個字典需要加載。有沒有辦法重構它?
我想盡快插入一個字典數據完成下載,並把它下載失敗重試機制。我怎樣才能做到這一點?