Как проанализировать все наблюдаемые в zip Rx-андроиде перед вызовом Fun [n]? - PullRequest
0 голосов
/ 28 февраля 2019

Я хочу использовать Rx-android для архивирования 2 запросов на модернизацию.Я пишу этот код.

            MyTempService service = ServiceFactory.createRetrofitService(MyTempService.class, MyTempService.BOOK_FLIGHT);
            Observable<DomesticAirportsResponse> search1 = service.getDomesticAirports(getCityRequest);
            Observable<DomesticAirportsResponse> search2 = service.getDomesticAirports(getCityRequest2);
            Observable.zip(search1, search2,
                    new Func2<DomesticAirportsResponse, DomesticAirportsResponse, ArrayList<DomesticAirport>>() {
                         @Override
                        public ArrayList<DomesticAirport> call(DomesticAirportsResponse result1, DomesticAirportsResponse result2) {
                            if (result1.getErrorMessage() == 1) {
                                ArrayList<DomesticAirport> airports;
                                airports = new ArrayList<>();
                                airports.addAll(result1.getResultObject());
                                airports.addAll(result2.getResultObject());
                                return airports;
                            } else { //show error message to client 
                                Log.d(TAG, "response 1 has an error");
                                return null;
                            }
                       }
                    }
            )
                    .observeOn(AndroidSchedulers.mainThread())
                    .subscribeOn(Schedulers.io())
                    .subscribe(
                            new Subscriber<ArrayList<DomesticAirport>>() {


                                @Override
                                public void onCompleted() {
                                    Log.d(TAG, "onCompleted: ");
                                }

                                @Override
                                public void onError(Throwable e) {
                                    Log.d(TAG, "onError: " + e.getMessage());
                                }


                                @Override
                                public void onNext(ArrayList<DomesticAirport> airports) {
                                    Log.d(TAG, "onNext: " + airports.size());
                                }
                            }
                    );

Этот код работает правильно, но мне нужно проанализировать ответ каждого запроса. Если каждый ответ имеет истинное условие, вызывается Fun2.для большей ясности вопроса, предположим, что у нас есть 2 наблюдаемые с именами search1 и search2.search1 занимает 2 секунды, search2 - 30 секунд, а ответ search1 имеет ложное условие.Приведенный выше код показывает ошибку через 30 секунд, но мне нужно показать ошибку через 2 секунды, и search2 отменен.

Что мне делать для этого вопроса?

...