Выполнение цепочки различных сетевых вызовов с использованием Rx2 и Retrofit2 - PullRequest
0 голосов
/ 05 марта 2019

У меня есть эта функция последовательных сетевых вызовов

 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()
                }
            }))
}
...