RxJava2のSingle.zipのエラー処理ではまった話

問題

RxJavaでたまにonErrorReturnItemなどでエラー処理をしていてもたまにエラーがすり抜けてきてアプリが落ちてしまうことがあった
問題となっていそうな部分を簡単に表すと以下のようになっていた

Single.zip(
  Single
  Single
)
.onErrorReturnItem

対処方法

RxJavaのissuesを調べてみると同じ問題があった
Rx2: Multiple errors in zip'ed observables throw exception

ここに書いてある対処方法は、

  • RxJavaPlugins.setErrorHandler()でエラーハンドラーを設定する(issueのコメントではsetOnErrorになっているが名前が変更になった?)
  • zipの中のSingleでonErrorReturnonErrorResumeNextなどを呼び出す

いっけん良さそうに見えるので原因がわかりづらくてはまってしまった
実際にはどうしてそうなってしまうのかまだわかっていないのでRxJavaの実装を読んでいきたい