Я работаю над приложением Android, которое извлекает два разных объекта через API, к которому я обращаюсь через RxJava Observables. Чтобы обновить пользовательский интерфейс, мне нужны и результаты.RxJava: функция вызова при завершении двух наблюдаемых с различными типами результатов
Как я могу запустить функцию, как только оба наблюдателя завершатся? Кажется, что такие функции, как merge
, делают то, что я планирую, но насколько я вижу, они работают только для Observables с одинаковым типом результата или для него нужен составной объект, который может представлять оба типа.
Простой пример:
Observable.just("Hello world")
.subscribe(new Action1<String>() {
@Override
public void call(String s) {
System.out.println(s);
}
});
Observable.just(1, 2, 3, 4, 5, 6)
.subscribe(new Action1<Integer>() {
@Override
public void call(Integer i) {
System.out.println(i);
}
});
Что мне нужно сделать, чтобы запустить System.out.println("Finished!")
как только оба Наблюдаемые выполнили свою задачу?
В конкретном случае моего приложения для Android я мог просто сохранить результаты в реальном классе, иметь функцию updateUi, которая работает только тогда, когда все необходимые данные уже появились и вызывают эту функцию как из onCompleted звонков, но я чувствую Существует лучший способ.
Взгляните: http://reactivex.io/documentation/operators/zip.html и http://reactivex.io/documentation/operators/combinelatest.html – Than
Посмотрите на .zip(). –
'zip' не будет работать в этом случае, так как первый Observable возвращает меньше результатов, чем второй. Я мог бы использовать 'combLatest', но в этом случае это тоже не очень хорошо. Я просто хочу получить уведомление, если оба Observables будут закончены. – Strayer