java - 如果调用 doOnSubscribe() 返回的对象,RxJava2 dispose() 不起作用

标签 java rx-java rx-java2

我无法理解为什么以下代码不起作用。我做错了什么还是 RxJava2 实现中的某种错误?

private Disposable savedDisposable;

@Test
public void test() {
    final TestObserver<Integer> observer = new TestObserver<>();

    Observable<Integer> t = Observable.just(10)
            .delay(100, TimeUnit.MILLISECONDS)
            .doOnSubscribe(disposable -> savedDisposable = disposable);

    t.subscribe(observer);

    savedDisposable.dispose();  //this doesn't work
    //observer.dispose();       //this works  

    assertTrue(observer.isDisposed());
}

最佳答案

回答发布的问题:

您在中间处理,因此 Disposable 端无法知道其上游已被处理,因为 dispose() 调用总是向上游移动。

DisposableObserverResourceObserversubscribeWith 和 lambda-subscribe() 方法可以获取你在最后一个 Disposable 对象,你可以通过 dispose() 处理它。


不过,在问题列表中,OP 想要一个 ObserverDisposable 出现在消费者类型上,并发现这可以通过受约束的泛型来实现,例如:

public static <T, K extends Observer<T> & Disposable> K subscribe(
        Observable<T> o, K observer) {
    o.subscribe(observer);
    return observer;
}

关于java - 如果调用 doOnSubscribe() 返回的对象,RxJava2 dispose() 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43513399/

相关文章:

java - 如何在后台2分钟后调用方法

java - 从服务器下载图像到android并在imageview中显示

Android RxJava 取消旧请求

具有 rx 顺序请求的 Android retrofit2

java - RxJava2 throttle 第一()

java - 集成 apache tomcat 和 solr

java - JUnit/ Selenium : Splitting my class to use the Page Object Model

rx-java - RxJava 中的 EventLoopScheduler 等价物?

kotlin - 如何将 concat 与 lambda 和 ObservableSource 一起使用

android - 使用 RxJava 执行单元测试时出现 NullPointerException