简体   繁体   English

为什么不调用doOnDispose?

[英]Why is doOnDispose not called?

When creating an Observable like this: 在创建像这样的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 is called, doOnDispose is not called. doOnSubcribe叫, doOnDispose不叫。

Why is that? 这是为什么?

You need to use the doFinally() operator. 您需要使用doFinally()运算符。

doOnDispose() has a very narrow use case, where the observable is explicitly disposed. doOnDispose()有一个非常狭窄的用例,其中observable被明确处理。 In your example, the observable terminates "naturally" by onComplete() . 在您的示例中,observable由onComplete() “自然地”终止。 By the time that you call dispose() , the observable is done, and nothing will happen -- disposing a completed observable has no effect. 当你调用dispose() ,observable就完成了,什么都不会发生 - 处理完成的observable没有任何效果。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM