RxJava2 dispose()不';如果对doOnSubscribe()返回的对象调用,则无法工作
我在理解为什么下面的代码不起作用时遇到了问题。我是做错了什么,还是RxJava2实现中存在某种缺陷RxJava2 dispose()不';如果对doOnSubscribe()返回的对象调用,则无法工作,java,rx-java,rx-java2,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)
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());
}
private一次性存储可添加;
@试验
公开无效测试(){
最终测试观察者=新的测试观察者();
可观察的t=可观察的。刚好(10)
.延迟(100,时间单位.毫秒)
.doOnSubscribe(一次性->保存可添加=一次性);
t、 签署(观察员);
savedDisposable.dispose();//这不起作用
//observer.dispose();//这是可行的
assertTrue(observer.isDisposed());
}
回答发布的问题:
您正处于中间,因此结束代码<代码>一次性代码>代码不能知道它的上游已经被处理了,因为<代码>处理()/代码>调用总是向上行进。 有
DisposableObserver
、ResourceObserver
、subscribeWith
和lambda-subscribe()
方法,它们将在最末端为您提供一个一次性的
对象,您可以通过dispose()
进行处置
但在问题列表上,OP希望消费者类型上出现一个
观察者
和一次性
,并发现这可以通过受限泛型实现,例如:
public static <T, K extends Observer<T> & Disposable> K subscribe(
Observable<T> o, K observer) {
o.subscribe(observer);
return observer;
}
publicstatick订阅(
可观测的(o,K观察者){
o、 签署(观察员);
返回观测器;
}
如果不工作,我假设assertTrue失败?@James是的,请避免交叉发布:doOnSubscribe()
提供的一次性应用程序的有效用例是什么?官方文档和各种各样的教程似乎都没有充分强调应该避免使用doOnSubscribe()
获取订阅的一次性
。谢谢你的澄清。我有很多代码需要检查!