RxJava 分别和一起订阅多个 observable

RxJava subscribe multiple observables separately and together

我有两个网络请求。

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 中是否有其他下降解决方案?

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