Итак, я играю с RX (действительно круто), и я преобразовываю свой API, который обращается к базе данных sqlite в Android, чтобы возвращать наблюдаемые.
Поэтому, естественно, одна из проблем, которую я начал пытаться решить, звучит так: «Что, если я хочу сделать 3 вызова API, получить результаты, а затем выполнить некоторую обработку, когда все они будут завершены?»
Это заняло у меня час или два, но в конце концов я нашел Zip Function, и это помогло мне ловко:
Observable<Integer> one = getNumberedObservable(1);
Observable<Integer> two = getNumberedObservable(2);
Observable<Integer> three = getNumberedObservable(3);
Observable.zip(one, two, three, new Func3<Integer, Integer, Integer, Integer>() {
@Override
public Integer call(Integer arg0, Integer arg1, Integer arg2) {
System.out.println("Zip0: " + arg0);
System.out.println("Zip1: " + arg1);
System.out.println("Zip2: " + arg2);
return arg0 + arg1 + arg2;
}
}).subscribe(new Action1<Integer>() {
@Override
public void call(Integer arg0) {
System.out.println("Zipped Result: " + arg0);
}
});
public static Observable<Integer> getNumberedObservable(final int value) {
return Observable.create(new OnSubscribeFunc<Integer>() {
@Override
public Subscription onSubscribe(Observer<? super Integer> observer) {
observer.onNext(value);
observer.onCompleted();
return Subscriptions.empty();
}
});
}
Большой! Так что это круто.
Поэтому, когда я архивирую 3 наблюдаемых объекта, они запускаются последовательно. Что, если я хочу, чтобы все они работали параллельно одновременно, чтобы получить результаты быстрее? Я поэкспериментировал с несколькими вещами и даже попытался прочитать некоторые оригинальные материалы RX, написанные людьми. в С#. Я уверен, что есть простой ответ. Может кто-то указать мне верное направление? Каков правильный способ сделать это?