将第一个观察者推迟到在RxJava中调用所有其他观察者之前

时间:2019-05-13 11:00:58

标签: java rx-java rx-java2

我有一个可观察的事件,可以有多个观察者。

第一个观察者始终是一个清理代码,它将处置对可观察对象的所有其他订阅(这是因为所有其他观察者可以稍后由代码的某些其他部分添加)。

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。但这似乎不是执行此操作的正确方法。

是否可以适当地确保在调用其他现有观察者之后始终调用第一个观察者?

1 个答案:

答案 0 :(得分:2)

退后一步;您无需手动处理所有中间阶段。

Observable<Object> eventObservable = Observable.just(1).take(1).share();

这将在1个事件后自动终止,并将分配给eventObservable的所有订阅。无需手动清理。