6

複数の HTTP 呼び出しを圧縮して並行して実行します。現在、そのうちの 0..n は明らかに失敗する可能性があります。問題は、たとえば 2 つの呼び出しがほぼ正確な時間に失敗した場合、エラー 1 が処理されますdoOnErroronErrorReturnItem、エラー 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のみを許可するべきではありませんか? これを行うより良い方法はありますか?

4

0 に答える 0