如何并行获取可观察对象,其中只有一个 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())
我想在我的 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())