Почему карта называется более одного раза? - PullRequest
0 голосов
/ 16 апреля 2019

У меня есть следующий код:

disposable = Single.fromCallable(() ->fetchData())
                .map(myObject::doUpdate)
                .subscribeOn(mySingleThreadScheduler)
                .observeOn(AndroidSchedulers.mainThread())
                .doOnSuccess(consumer)
                .subscribe(myFunction, failConsumer);  

То, что я вижу, это:
fetchData() и myObject::doUpdate вызываются тем же потоком (на основе имени потока / идентификатора потока), который я ожидал.
Но myObject::doUpdate нам звонили более 1 раза, и во второй раз, как будто он получает данные до моего fetchData запуска. Почему?

1 Ответ

1 голос
/ 16 апреля 2019

Если вы посмотрите официальную документацию оператора ReactiveX map здесь и прилагаемую диаграмму мрамора, вы увидите, что функция карты выполняется для каждого ввода

enter image description here

Таким образом, вы не можете положиться на нее, если хотите выполнить функцию со всеми доступными элементами одновременно.

С помощью оператора map вы можете применить преобразование ккаждый элемент, который будет выполнен индивидуально.

...