Android RxJava分别和一起订阅多个观测值
我有两个网络请求Android RxJava分别和一起订阅多个观测值,android,kotlin,rx-java,Android,Kotlin,Rx Java,我有两个网络请求 fun getPostDetail(postId: Int): Single<Post> fun getComments(postId: Int): Single<List<Post>> 并操纵视图: fun showPostDetails(post) fun showComments(comments) 我尝试过这种方式-订阅每个,也订阅合并的: postDetail = getPostDetail(postId) getComment
fun getPostDetail(postId: Int): Single<Post>
fun getComments(postId: Int): Single<List<Post>>
并操纵视图:
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()
为什么不使用合并并删除每个独立的订阅?
Single.merge(postDetail, getComments)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.doOnSubscribe {
showLoadingScreen()
}
.doOnTerminate {
hideLoadingScreen()
}
.subscribe()