我想知道为什么subscribeWith
方法会返回订阅者但不是严格的Disposable或者订阅。
我认为subscribeWith
方法是为了使用返回Subscription的RxJava 1.x' subscribe
方法而设计的。因此,在2.0中,我认为subscribeWith
方法的主要用法是与实现Disposable的Subscriber一起使用。
Howerver,因为subscribeWith
方法可以返回订阅者,所以可以使用类似主题的用法(例如下面的代码)。
Subscriber<Long> subscriber = Flowable.interval(100, TimeUnit.MILLISECONDS)
.subscribeWith(new Subscriber<Long>() {
...
});
...
subscriber.onNext(999);
...
这是好的还是我不应该做的事情?
答案 0 :(得分:5)
2.x中的订阅者未实现Disposable,并且需要包装/劫持每个订阅者。您会收到您订阅的内容,我们会ResourceSubscriber
和DisposableSubscriber
以正确的方式专门实施Disposable
。
Howerver,因为subscribeWith方法可以返回订阅者,所以可以使用类似主题的用法(例如下面的代码)。
不推荐这样做,因为您可能会同时调用onNext
来违反协议。 (这不是subscribeWith
的结果,因为您可以预先创建Subscriber
,致电subscribe()
,然后致电原始onNext()
实例上的Subscriber
,协议方式相同。)
subscribeWith
确实适用于以流利方式支持Disposable的订阅者,并允许以下模式:
CompositeDisposable cd = new CompositeDisposable();
cd.add(source.subscribeWith(new ResourceSubscriber<Integer>() { ... }));
documentation我们的wiki有关此和其他2.x的详细信息。
答案 1 :(得分:0)
如果您具有要绑定到其他可观察对象的同一观察者,请使用.subscribeWith,以便多个Observable可以使用相同的观察者实现。