RxJavaで連続してAPIを叩いた時に発生したエラー、独自の形式にすることで処理を切り分けたいと思ったこと、ありませんか?僕はあります(そもそもAPIのエラーで判別したいけど、実装がアレだったもんで)。
NGパターン
チェインの途中でdoOnError
を挟んでエラーをthrowしたけど、止まらずその後のflatMap
に流れてしまうのでダメ。
repo.getAuth("xxx")
.doOnError { throw AuthError("${it.message}") }
.flatMap { repo.getPayment(it.token) }
OKパターン
onErrorResumeNext
を使うと、エラーが発生した時に別のObservableを流せる。ここで独自のエラーを返せば、onError
で処理を切り分けることが可能。
repo.getAuth("xxx")
.onErrorResumeNext { Single.error(AuthError("${it.message}")) }
.flatMap { repo.getPayment(it.token) }