Как узнать, какой API потерпел неудачу при использовании RX и модифицированной цепочки - PullRequest
0 голосов
/ 26 августа 2018

У меня есть следующий код, я использую модификацию в сочетании с RX для выполнения нескольких вызовов, для краткости я добавляю только три вызова:

 public void getDashboardData(final String userKey, final String sign) {

        final DashboardDataApi service = RetrofitInstance.getRetrofitInstance().create(DashboardDataApi.class);


        Observable<ResponseBody> aGetApi = service.aGetApi(userKey, sign);
        final Observable<ResponseBody> dGet = service.dGet(userKey, sign);
        final Observable<ResponseBody> bOnGet = service.bonGet(userKey, sign);


        final List<ResponseBody> result = new ArrayList<>();
        Disposable disposable = aGetApi
                .subscribeOn(Schedulers.io())
                .flatMap(new Function<ResponseBody, ObservableSource<ResponseBody>>() {
                    @Override
                    public ObservableSource<ResponseBody> apply(ResponseBody response1) {
                        result.add(response1);
                        return dGet;
                    }
                })
                .flatMap(new Function<ResponseBody, ObservableSource<ResponseBody>>() {
                    @Override
                    public ObservableSource<ResponseBody> apply(ResponseBody response1) {
                        result.add(response1);
                        return bOnGet;
                    }
                }).map(new Function<ResponseBody, ResponseBody>() {
                    @Override
                    public ResponseBody apply(ResponseBody response3) {
                        result.add(response3);
                        return response3;
                    }
                }).observeOn(AndroidSchedulers.mainThread())
                .subscribeWith(new DisposableObserver<ResponseBody>() {

                    @Override
                    public void onNext(ResponseBody responseBody) {
                        try {
                            String jsonData = responseBody.string();
                            Log.d("RX", "RESP: " + jsonData);
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    }

                    @Override
                    public void onError(Throwable e) {
                        Log.d("RX", "Error");
                        e.printStackTrace();
                    }

                    @Override
                    public void onComplete() {
                        Log.d("RX", "RX Flat Map chaining complete");
                    }
                });
}

Теперь я застрял в следующих местах:

1) Если один Api выходит из строя, я должен подождать и повторить, пока не получу результат. 2) Как только все будет готово, я должен заполнить объект результата.

Я довольно новичок в RX, так что сейчас не так много.

...