【问题标题】:RxJava: how to unsubscribe a subject from an observableRxJava:如何取消订阅 observable 的主题
【发布时间】:2020-07-14 13:41:15
【问题描述】:

使用 RxJava3,给定 ObservableSubject,我可以将 Subject 订阅到 Observable:

observable.subscribe(subject); // returns void, not a subscription

后来我的 Subject 对 Observable 不感兴趣了,如何退订 Observable 呢?

【问题讨论】:

    标签: rx-java rx-java3


    【解决方案1】:

    我认为最简单的选择是使用返回Disposableoverload of subscribe,并让每个处理程序在您的Subject 上调用适当的方法,如下所示:

    Disposable d = observable
        .subscribe(subject::onNext, subject::onError, subject::onComplete);
    
    // Later
    d.dispose();
    

    您还可以创建一个DisposableObserver 将所有消息转发到Subject,并使用subscribeWith 而不是subscribe,虽然它更冗长:

    Disposable d = observable
    .subscribeWith(new DisposableObserver<Integer>() {
             @Override public void onStart() {
             }
             @Override public void onNext(Integer t) {
                 subject.onNext(t);
             }
             @Override public void onError(Throwable t) {
                 subject.onError(t);
             }
             @Override public void onComplete() {
                 subject.onComplete();
             }
         });
    

    我不知道有任何更简洁的选项,来自 RxJava 错误跟踪器的 this issue 似乎支持这一点,尽管它针对的是 RxJava2。

    【讨论】:

      猜你喜欢
      • 2019-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多