推迟第一个观察者,直到所有其他观察者在 RxJava 中被调用
Postpone first observer until all other observers has been called in RxJava
我有一个可以有多个观察者的可观察事件。
第一个观察者始终是清理代码,它将处理所有其他对可观察对象的订阅(这是因为所有其他观察者稍后可以通过代码的其他部分添加)。
CompositeDisposable disposable = new CompositeDisposable();
Observable<Object> eventObservable = Observable.just(1);
disposable.add(eventObservable.subscribe(event -> {
disposable.dispose();
System.out.println("Observer 1");
}));
disposable.add(eventObservable.subscribe(event -> {
System.out.println("Observer 2");
}));
disposable.add(eventObservable.subscribe(event -> {
System.out.println("Observer 3");
}));
当前输出:
Observer 1
预期输出:
Observer 2
Observer 3
Observer 1
实现此目的的一种方法是为第一个观察者添加 delay
。但这似乎不是执行此操作的正确方法。
是否可以正确确保第一个观察者总是在其他现有观察者被调用之后被调用?
后退一点;您不需要处理所有中间阶段的手动处理。
Observable<Object> eventObservable = Observable.just(1).take(1).share();
这将在 1 个事件后自动终止,并将分发给 eventObservable
的所有订阅。无需手动清理。
我有一个可以有多个观察者的可观察事件。
第一个观察者始终是清理代码,它将处理所有其他对可观察对象的订阅(这是因为所有其他观察者稍后可以通过代码的其他部分添加)。
CompositeDisposable disposable = new CompositeDisposable();
Observable<Object> eventObservable = Observable.just(1);
disposable.add(eventObservable.subscribe(event -> {
disposable.dispose();
System.out.println("Observer 1");
}));
disposable.add(eventObservable.subscribe(event -> {
System.out.println("Observer 2");
}));
disposable.add(eventObservable.subscribe(event -> {
System.out.println("Observer 3");
}));
当前输出:
Observer 1
预期输出:
Observer 2
Observer 3
Observer 1
实现此目的的一种方法是为第一个观察者添加 delay
。但这似乎不是执行此操作的正确方法。
是否可以正确确保第一个观察者总是在其他现有观察者被调用之后被调用?
后退一点;您不需要处理所有中间阶段的手动处理。
Observable<Object> eventObservable = Observable.just(1).take(1).share();
这将在 1 个事件后自动终止,并将分发给 eventObservable
的所有订阅。无需手动清理。