如何并行获取可观察对象,其中只有一个 api 调用具有重试逻辑

how to fetch observables in parallel, wherein only one api call has a retry logic

我想在我的 android 应用程序中使用 RxJava 实现一个逻辑,这需要三个并行的 api 调用。只有第三个 api 调用具有重试逻辑。如果在三次尝试后成功,则将对第四次 api 进行后续调用,否则只有第一次和第二次 api 调用的结果将传递给订阅者。

我尝试使用 Zip 运算符实现此目的,但后来遇到了第三次 api 调用的重试逻辑。

    Observable<String> observable1 = Observable.just("A","B");

    Observable<Integer> observable2 = Observable.just(1,2);

    Observable<Boolean> observable3 = Observable.just(Boolean.TRUE,     Boolean.FALSE);

Observable.zip(observable1, observable2, observable3, new Function3() { @覆盖 public Object apply(String s, Integer integer, Boolean aBoolean) throws Exception { 如果 (aBoolean==null){ alphabets3.retry(3).doOnComplete(新动作() { @覆盖 public void 运行() 抛出异常{ // 结果永远不会被使用 } }); }

            return s+integer+aBoolean;
        }
    }).subscribe(new Observer<Object>() {
        @Override
        public void onSubscribe(Disposable d) {

        }

        @Override
        public void onNext(Object o) {
            Log.e("onNext-->", o.toString());
        }

        @Override
        public void onError(Throwable e) {

        }

        @Override
        public void onComplete() {

        }
    });

如果任何 Observable 在 Zip 运算符中失败,Zip 将使流失败,我知道用 Zip 实现并行执行和错误处理的唯一方法是将 onErrorResumeNext 添加到每个 Observable,将错误映射到一个新的稍后处理的模型......并处理你想在 zip 映射函数中做的事情......例如

Obsevable.zip(
observable1.onErrorResumeNext{Observable.just(Model(it)},
observable2.onErrorResumeNext{Observable.just(Model(it)},
observable3.retryWhen {t is TimeOutException} //here you can add your retry logic
.onErrorResumeNext(t -> Observable.just(Model(t)),(m1 , m2, m3) -> Result())