关于使用返回Subscriber的subscribeWith方法

时间:2016-10-12 07:35:31

标签: rx-java

我想知道为什么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);

...

这是好的还是我不应该做的事情?

2 个答案:

答案 0 :(得分:5)

2.x中的订阅者未实现Disposable,并且需要包装/劫持每个订阅者。您会收到您订阅的内容,我们会ResourceSubscriberDisposableSubscriber以正确的方式专门实施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可以使用相同的观察者实现。