RxJava2 оператор плоской карты - PullRequest
0 голосов
/ 29 мая 2019

Я пытаюсь использовать оператор 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 Ответ

1 голос
/ 29 мая 2019

Я думаю, flatMap отличный оператор для таких вещей.Вы будете обрабатывать ошибки каждого запроса, и они будут выполняться один за другим.Если вам нужно что-то сделать между этими двумя запросами, используйте оператор doOnSuccess().

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