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