У меня есть конкретный сценарий, в котором я реализовал PublishSubject для создания элементов на основе настраиваемого события. Для каждого элемента, который будет отправлен, мне также нужно сохранить это значение (дорогостоящая операция). Я пытаюсь создать функцию (например, map
), которая будет вызываться один раз для всех наблюдателей, а затем элемент, который будет получен каждым наблюдателем с помощью метода onNext()
.
Тема:
static final PublishSubject<SomeResult> commonSubject = PublishSubject.create()
Триггер (испускающие предметы):
commonSubject.onNext(new SomeResult())
Выставляем тему (будет использоваться контроллером):
public static Observable<SomeResult> observeResults() {
return commonSubject.share();
}
Контроллер:
public Observable<SomeResult> observeResults() {
return CustomConsumer.observeResults()
.observeOn(Schedulers.single());
}
Подписчики:
CustomControllerResult.observeResults().subscribe(result -> doSomething());
CustomControllerResult.observeResults().subscribe(result -> doSomethingElse());
Каждый Observer получает элементы, как ожидалось, но если я добавлю дорогостоящую операцию к контроллеру, она будет вызываться для каждого наблюдателя (чего я не хочу):
public Observable<SomeResult> observeResults() {
return CustomConsumer.observeResults()
.observeOn(Schedulers.single())
.compose(persistResult())
.compose(logResult())
.share();
}
Есть идеи, как добиться желаемого результата?
share()
ПОСЛЕ дорогостоящей операции в цепочке? - person LordRaydenMK   schedule 11.09.2019