I have this sequential network calls function
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()
}
}))
}
Everything is working fine as long as primaryMenuFetcher.getMenu()
dont have any errors. I want to achieve that if it has error it would be basicaly skiped and service.getPromotions()
would be called instead of braking whole chain
I dont know how I managed to not figure it out by my self. I just needed to use .onErrorResumeNext
Working solution is
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()
}
}))
}