複数の HTTP 呼び出しを圧縮して並行して実行します。現在、そのうちの 0..n は明らかに失敗する可能性があります。問題は、たとえば 2 つの呼び出しがほぼ正確な時間に失敗した場合、エラー 1 が処理されますdoOnError
がonErrorReturnItem
、エラー 2 がすり抜けて例外が発生することです。これは、2 つの onError 演算子でエラー 1 がまだ完全に処理されていないときに、エラー 2 が発生した場合に発生すると思います。
次の簡略化されたコードで再現できます。
buttonClick.flatMapSingle(action -> Single.zip(
Single.error(new Throwable("error 1")).delay(500, TimeUnit.MILLISECONDS),
Single.error(new Throwable("error 2")).delay(500, TimeUnit.MILLISECONDS),
(integer, integer2) -> true
)
.doOnError(t -> Timber.d(t.getMessage()))
.onErrorReturnItem(true))
.subscribe();
したがって、時々これはスローされます:
D/Main: error 1
W/System.err: java.lang.Throwable: error 2
1 つのエラーSingle.zip
のみを許可するべきではありませんか? これを行うより良い方法はありますか?