У меня есть два сетевых запроса.
fun getPostDetail(postId: Int): Single<Post>
fun getComments(postId: Int): Single<List<Post>>
Что я хочу сделать, это...
У меня есть функции, которые обрабатывают загрузку страницы:
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?
Вы можете попробовать использовать 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()