Привет, я использую RxJava для работы с дисковым хранилищем и выполняю операции. В принципе у меня есть метод, как это:Подождите, пока предыдущий Rx не будет завершен
public Observable<String> getStorageItem(String id, String type) {
return Observable.defer(new Func0<Observable<String>>() {
// Run db operations to get storage item.
}
}
Проблема заключается в том, что это возможно, этот метод getStorageItem(...)
получает подписку на несколько раз подряд. А операции DB в пределах наблюдаемого не могут выполняться одновременно. Какой у меня лучший вариант? Должен ли я вручную создать некоторую сортировку очереди? Или у RxJava есть какой-то инструмент, который позволяет мне блокировать операцию до тех пор, пока не будет завершена предыдущая?
На самом деле, я думаю, я могу просто решить это с помощью синхронизированной блокировки во всех моих операциях Db. Дурак я. Но хотелось бы услышать, есть ли у кого-либо другие мнения по этому поводу. – clu
Вы можете посмотреть и посмотреть, соответствует ли 'flatMap (Func1, int)' вашим потребностям (http://reactivex.io/RxJava/javadoc/rx/Observable.html#flatMap(rx.functions.Func1,%20int)) – mewa