RxJava 分别和一起订阅多个 observable
RxJava subscribe multiple observables separately and together
我有两个网络请求。
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()
我有两个网络请求。
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()