我尝试使用flatMap运算符在Android上使用改造功能提出两个请求。这个想法是发出第一个请求以获取用户,然后发出第二个请求,我需要知道获得第二个请求的用户总数。这就是我试图做到的方式。
remoteDataSource.requestAuthors()
.flatMap {remoteDataSource.requestAvatars(it.size) }
.subscribeOn(Schedulers.io())
.subscribe {
//here I need the authors and avatars to create the new object
}
flatMap是执行此操作的正确运算符吗?谢谢!
答案-是!
更新
在这种情况下,我应该这样做吗?
override fun requestAuthors(): Observable<List<AuthorResponse>> {
val authors = mutableListOf<Author>()
val authorResponse = remoteDataSource.requestAuthors()
.doOnNext { authors.addAll(it) }
.flatMap { remoteDataSource.requestAvatars(it.size) }
.subscribeOn(Schedulers.io())
.doOnNext {avatars->
avatars.results.forEach { avatar ->
authors.forEach { author ->
author.avatarUrl = avatar
}
}
}
return authorResponse
}
答案 0 :(得分:1)
我认为,flatMap
是执行此类操作的好手。您将处理每个请求的错误,它们将一个接一个地执行。
如果您需要在这两个请求之间做某事,请使用doOnSuccess()
运算符。
remoteDataSource.requestAuthors()
.doOnSuccess { /*interact with authors*/ }
.flatMap {remoteDataSource.requestAvatars(it.size) }
.subscribeOn(Schedulers.io())
.subscribe {
/*interact with avatart*/
}