我通过压缩它们并行执行多个 HTTP 调用。现在 0..n 他们显然会失败。问题是,当例如 2 次调用几乎在准确的时间失败时,错误 1 被处理,doOnError
但onErrorReturnItem
错误 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
只允许发出一个错误吗?有一个更好的方法吗?