6

我通过压缩它们并行执行多个 HTTP 调用。现在 0..n 他们显然会失败。问题是,当例如 2 次调用几乎在准确的时间失败时,错误 1 ​​被处理,doOnErroronErrorReturnItem错误 2 滑过并导致异常。我认为如果错误 2 碰巧出现,而错误 1 ​​仍未在这两个 onError 运算符中完全处理,就会发生这种情况。

可以使用以下简化代码重现它:

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

不应该Single.zip只允许发出一个错误吗?有一个更好的方法吗?

4

0 回答 0