0
votes

i am in the process of learning RxJava / Android (i'm currently combining it with Retrofit for network calls) , now i have a question, say i have 6 different Observables , like this : Observable<Client> clients = apiInterface.getClients() Observable<Orders> orders = apiInterface.getOrders(); Observable<Products> products = apiInterface.getProducts();

etc. apiInterface being the Retrofit client , and getClients etc. being the calls

Now, how do i do these 6 different calls asyncronous, and when all 6 are done -> do something (like dimiss a progress bar) ? And when each call finishes, i'll be getting the data returned the call and inserting via greenDAO. Managed to chain them syncronously until now, but i need them to be fired in parallel tasks (like the 6 AsyncTasks + countDownLatch implementation i have right now for these calls)

1
Not android, but maybe this will helpTassos Bassoukos

1 Answers

2
votes

You should use the zip operator like that :

Observable<Client> clients = apiInterface.getClients()
 Observable<Orders> orders = apiInterface.getOrders();
 Observable<Products> products = apiInterface.getProducts();

Observable<String> clientorders = Observable.zip(
                        clients,
                        orders,
                        products,
                        new Func3<Client, Orders, Products> {
                                @Override
                                public String call(Client client, Orders orders, products products) {


                                      return "progress bar dismissed" ;
                                }
                        }
);     

clientorders.subscribe(new Action1<String>() {

                    @Override
                    public void call(String s) {
                        //action
                        //dimiss progress bar
                    }

                })
}

Zip operator : http://reactivex.io/documentation/operators/zip.html