RxJava подписывают несколько наблюдаемых отдельно и вместе

1

У меня есть два сетевых запроса.

fun getPostDetail(postId: Int): Single<Post>
fun getComments(postId: Int): Single<List<Post>>

Что я хочу сделать, это...

  1. Показать экран загрузки при запуске. эти два запроса должны работать независимо друг от друга.
  2. По завершении каждого запроса отображаемые результаты обновляются.
  3. Скрыть экран загрузки, когда все запросы прекращаются.

У меня есть функции, которые обрабатывают загрузку страницы:

fun showLoadingScreen()
fun hideLoadingScreen()

и манипулировать видом:

fun showPostDetails(post)
fun showComments(comments)

Я пробовал таким образом - подписаться на каждого, а также подписаться объединенным:

postDetail = getPostDetail(postId)
getComments = getComments(postId)

postDetail.subscribe()
getComments.subscribe()

Single.merge(postDetail, getComments).subscribe()

В этом случае он делает несколько запросов, а не один раз.

Каков наилучший подход к такой проблеме? Я могу использовать CountDownLatch для подсчета завершения каждого запроса, но есть ли другое решение спуска в RxJava?

Теги:
kotlin
rx-java

1 ответ

1
Лучший ответ

Вы можете попробовать использовать doOnSuccess

postDetail = getPostDetail(postId).doOnSuccess { showPostDetails(it) }
getComments = getComments(postId).doOnSuccess { showComments(it) }

Тогда просто объедините их

Single.merge(postDetail, getComments)
    .subscribeOn(Schedulers.io())
    .observeOn(AndroidSchedulers.mainThread())
    .doOnSubscribe {
        showLoadingScreen()
    }
    .doOnTerminate {
        hideLoadingScreen()
    }
    .subscribe()

Ещё вопросы

Сообщество Overcoder
Наверх
Меню