簡體   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