RxJava2 connectableObservables - autoConnect (2) - почему 2 абонента не ожидают соединения? - PullRequest
0 голосов
/ 18 ноября 2018

Я создал подключенный объект, подобный этому:

final List<Integer> list = new ArrayList<Integer>();
        for(int j=1;j<=3;j++)
            list.add(j);

        Observable<Integer> observable = Observable.fromIterable(list);

это наблюдаемое излучает 1, 2, 3

Теперь я преобразую его в connectableObservable таким образом:

observable.publish().autoConnect(2);

Поэтому я ожидаю, так как я передал в 2 для автоматического подключения, что он не будет запускаться, пока не будут найдены 2 подписчика. но вместо этого он выполняется только на 1 найденном подписчике.

позвольте мне показать вам, что я пытался:

observable.subscribe(new Consumer<Integer>() {
            @Override
            public void accept(Integer integer)  {
                Log.v("consumer1:", ""+integer);

            }
        });

Я ожидаю, что это НЕ печатает ничего в журнал. но вместо этого я получаю следующее:

consumer1:: 1
consumer1:: 2
consumer1:: 3

согласно документации по autoConnect (int numberOfSubscribers):

* @param numberOfSubscribers the number of subscribers to **await** before calling connect
 *                            on the ConnectableObservable. A non-positive value indicates
 *                            an immediate connection.

1 Ответ

0 голосов
/ 18 ноября 2018

В RxJava вы не должны игнорировать возврат операторов:

Observable<Integer> shared = observable.publish().autoConnect(2);

shared.subscribe(new Consumer<Integer>() {
        @Override
        public void accept(Integer integer)  {
            Log.v("consumer1:", ""+integer);
        }
    });

shared.subscribe(new Consumer<Integer>() {
        @Override
        public void accept(Integer integer)  {
            Log.v("consumer2:", ""+integer);
        }
    });

Рекомендуемое чтение: https://github.com/ReactiveX/RxJava#simple-background-computation

...