繁体   English   中英

RxJava2:仅当所有 observable 都发出错误时才发出错误

[英]RxJava2: Emit error only when all observables emitted error

我有多个 observables 进行网络调用,并且只有当所有 observables 发出错误时,我才需要从组合器 observable 发出错误。 如果至少有一个 observable 完成,则应该传递结果。

我当前的流功能是这样的:

Observable.fromIterable(list)
.flatMap{networkObservable}
.reduce{combine result of all network observables to same list}

我只能这样做:

Observable.fromIterable(list)
.flatMap{networkObservable.onErrorReturnItem(errorItem)}
.reduce{check if all items are error items and return error item otherwise combine result of 
all network observables to same list}

但我想知道是否有更好的方法来处理这种情况。

如果我理解正确,如果任何networkObservable中至少有一个项目,错误应该被忽略,对吗? 在这种情况下,您可以检测发出的onNext s,然后在错误处理程序中抑制错误:

Observable.using(
    () -> new AtomicBoolean(),
    hasItem -> Observable.fromIterable(list)
                         .flatMap(v -> networkObservable, true) // delay errors
                         .doOnNext(v -> {
                              if (!hasItem.get()) {
                                   hasItem.set(true);
                              }
                         })
                         .onErrorResumeNext(error -> {
                              if (hasItem.get()) {
                                  return Observable.empty();
                              }
                              return Observable.error(error);
                         }),
    () -> { } // no need to clean up the AtomicBoolean
)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM