gpt4 book ai didi

java - RxJava2 : Emit error only when all observables emitted error

转载 作者:行者123 更新时间:2023-12-01 18:29:31 28 4
gpt4 key购买 nike

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

我当前的流功能如下:

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,然后在错误处理程序中抑制错误:

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
)

关于java - RxJava2 : Emit error only when all observables emitted error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60185369/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com