flatmap не работает с foreach в RxJava - PullRequest
0 голосов
/ 04 октября 2019

Я пытаюсь получить список строк из API_1 (getList()), затем выполнить итерацию по каждой строке в списке и выполнить еще один сетевой вызов API_2 (syncData()) по каждой строке типа данных, почему-то я не понимаюпочему код ниже может делать вторые вызовы с forEach(), но не flatMap().

flatMap () Версия:

Observable.just(getListNetworkCall())
                .flatMapIterable(response -> response.getDataList())
                .flatMap(dataType -> syncData(dataType))
                .subscribeOn(Schedulers.io())
                .subscribe(new Consumer<Response2>() {
                    @Override
                    public void accept(Response2 response) throws Throwable {
                        System.out.println("response:" + response.toString());
                    }
                });

forEach ()Версия:

Observable.just(getList())
               .flatMapIterable(response -> response.getDataList())
               .forEach(dataType -> syncData(dataType));

private Observable<Response2> syncData(String dataType) {
        return Observable.just(syncDataNetworkCall(dataType));
}

Что я видел в flatMap() Version, так это то, что он выполнял только вызов getList (). Я пропускаю какие-либо знания о RxJava, я также ссылаюсь на Последовательность запросов RxJava Combine

Спасибо.

...