RxJava2 flatMap运算符

时间:2019-05-29 13:20:51

标签: android rx-java2

我尝试使用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

    }

1 个答案:

答案 0 :(得分:1)

我认为,flatMap是执行此类操作的好手。您将处理每个请求的错误,它们将一个接一个地执行。
如果您需要在这两个请求之间做某事,请使用doOnSuccess()运算符。

remoteDataSource.requestAuthors()
                .doOnSuccess { /*interact with authors*/ }
                .flatMap {remoteDataSource.requestAvatars(it.size) }
                .subscribeOn(Schedulers.io())
                .subscribe {
            /*interact with avatart*/
        }