[英]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.