java - 为什么不调用 doOnDispose?

标签 java rx-java rx-java2 rx-java3

当像这样创建一个 Observable 时:

public void foo() {

    Observable observable = Observable.fromCallable(() -> {
        bar();
        return "";
      })
      .doOnSubscribe(disposable -> System.out.println("onSubscribe"))
      .doOnDispose(() -> System.out.println("onDispose"));

    Disposable disposable = observable.subscribe();
    disposable.dispose();    
}

private void bar() {
    System.out.println("bar");
}

doOnSubcribe 被调用,doOnDispose 没有被调用。

这是为什么?

最佳答案

您需要使用 doFinally() 运算符。

doOnDispose() 有一个非常狭窄的用例,其中可观察对象被显式处理。在您的示例中,可观察对象通过 onComplete()“自然地”终止。当您调用 dispose() 时,observable 已完成,什么也不会发生——处置已完成的 observable 没有任何效果。

关于java - 为什么不调用 doOnDispose?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49154069/

相关文章:

java - Kafka Stream Punctuator 在重建本地存储数据时访问它

rx-java - 从 Observable 读取对象值

java - 取出元素直到某个字符并用 RxJava 将它们分组

android - RxJava 中的 MutableLiveData 等价物是什么?

kotlin - RxJava Zip 可观察可迭代

kotlin - 如何计算 observable 的执行时间

java - 如何接受自定义的Socket?

java - Java 中的泊松分布(正确性?)

java - Apache 詹姆斯,jsp servlet

kotlin - Rxjava - 如何获取当前和上一个项目?