RxJava подписывают несколько наблюдаемых отдельно и вместе - PullRequest
1 голос
/ 19 марта 2019

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

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?

1 Ответ

1 голос
/ 19 марта 2019

Вы можете попробовать использовать 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()

...