【问题标题】:Postpone first observer until all other observers has been called in RxJava推迟第一个观察者,直到在 RxJava 中调用了所有其他观察者
【发布时间】:2019-05-14 19:28:36
【问题描述】:

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

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

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

是否可以正确确保第一个观察者总是在其他现有观察者被调用之后被调用?

【问题讨论】:

    标签: java rx-java rx-java2


    【解决方案1】:

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

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

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

    【讨论】:

    • 感谢您的回答。但是我仍然想知道如果我提供的设置可以推迟第一个观察者的执行。由于单线程和事件循环,这在 RxJS 中很容易做到,但在 RxJS 中还没有找到方法。如果您认为不可能,我会接受您当前的回答。
    • 您不能在订阅处理程序中延迟,因为这会破坏反应流的异步保证。
    猜你喜欢
    • 1970-01-01
    • 2018-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-22
    相关资源
    最近更新 更多