使用Rx2和Retrofit2进行不同的网络呼叫链

时间:2019-03-05 12:38:43

标签: android retrofit2 rx-java2

我有这个顺序的网络通话功能

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

0 个答案:

没有答案