首页 > 解决方案 > RxJava 分别订阅多个 observables 和一起订阅

问题描述

我有两个网络请求。

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 中还有其他解决方案吗?

标签: androidkotlinrx-java

解决方案


您可以尝试使用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()


推荐阅读