У меня есть механизм push-уведомлений (PublishSubject), который запускает логику HTTP-запроса (flatMap). Базовый сценарий заключается в том, что всякий раз, когда приходит push, выполняется один HTTP-вызов, и результаты распространяются на несколько наблюдателей.
Я написал простую демонстрацию для этого случая, но flatMap выполняется для каждого зарегистрированного наблюдателя, в то время как я хотел бы, чтобы он запускался только один раз при каждом нажатии.
PublishSubject<Integer> subject = PublishSubject.create();
Observable<String> obs = subject.asObservable().flatMap(integer -> {
// this code runs for each observer, which is twice in this case
return Observable.just(String.valueOf(integer));
});
Observer mock = mock(Observer.class);
Observer mock1 = mock(Observer.class);
obs.subscribe(mock);
obs.subscribe(mock1);
subject.onNext(1);
Не могли бы вы предложить исправление?
Спасибо
P.S. Прямо сейчас я использую cache(1) для решения проблемы, но я не уверен, что это нормально. Более того, я не совсем понимаю, почему один поток выполнения будет зависеть от количества подключенных наблюдателей. Вы можете это прокомментировать?