У меня есть эта функция последовательных сетевых вызовов
private fun fetchData() {
disposables.add(primaryMenuFetcher.getMenu()
.observeOn(uiScheduler)
.flatMap { menuItems ->
primaryMenu = menuItems
onView {
setPrimaryMenuList(primaryMenu)
}
return@flatMap service.getPromotions()
}
.observeOn(uiScheduler)
.subscribe({ fetchedLeagues ->
featuredLeagues = fetchedLeagues
onView {
showPopularLeagues()
setPopularLeaguesList(featuredLeagues)
hideProgressBar()
}
}, {
onView {
showError()
hideProgressBar()
}
}))
}
Все работает нормально, пока primaryMenuFetcher.getMenu()
не имеет ошибок. Я хочу добиться того, чтобы в случае ошибки он был бы пропущен, и вместо торможения всей цепи был бы вызван service.getPromotions()
Я не знаю, как мне удалось не понять это самостоятельно. Мне просто нужно было использовать .onErrorResumeNext
Рабочий раствор
private fun fetchData() {
disposables.add(primaryMenuFetcher.getMenu()
.observeOn(uiScheduler)
.flatMap { menuItems ->
primaryMenu = menuItems
onView {
setPrimaryMenuList(primaryMenu)
}
return@flatMap service.getPromotions()
}
.onErrorResumeNext { return@onErrorResumeNext service.getPromotions() }
.observeOn(uiScheduler)
.subscribe({ fetchedLeagues ->
featuredLeagues = fetchedLeagues
onView {
showPopularLeagues()
setPopularLeaguesList(featuredLeagues)
hideProgressBar()
}
}, {
onView {
showError()
hideProgressBar()
}
}))
}