0

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()
                }
            }))
}
Antonis Radz
  • 3,036
  • 1
  • 16
  • 34

0 Answers0