Этого можно добиться, сопоставляя наблюдаемые типы с типом монада . т.е.
Сопоставьте Observables с типом, который может содержать состояния как ошибки, так и состояния успеха. Если ошибка генерируется в наблюдаемом потоке A, тип ошибки распространяется с использованием onErrorResumeNext.
Отобразите наблюдаемые значения B и C таким образом, чтобы они могли содержать сообщение об ошибке от A. во время плоского отображения A с B, проверьте тип значения, испускаемого из A, и, если это значение типа ошибки, распространите сообщение об ошибке также на C
Вот пример, который я пробовал в kotlin
val obs1 = Observable.create<Float> {
throw IllegalStateException("Shit happens")
}
val obs2 = Observable.just(1)
val obs3 = Observable.just("hii")
obs1.map { Result(null, it) }.onErrorResumeNext { er: Throwable ->
Observable.just(Result<Float>(er.message, null))
}.flatMap { fltResult ->
obs2.map { Result(fltResult.error, it) }
}.flatMap { intResult ->
obs3.map { Result(intResult.error, it) }
}.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread()).subscribe({
Log.d("Data: Error", it.data + ": " + it.error)
}, {
Log.d("Error", it.message)
})
Результат класса
data class Result<T>(val error : String?,val data : T?)