【问题标题】:Rx Java zip completes when any subject completes当任何主题完成时,Rx Java zip 完成
【发布时间】:2017-01-25 19:31:33
【问题描述】:

我正面临这个问题。据我所知,来自RxJavazip 方法等待所有可观察对象完成。

但是我是否得到了另一种行为。

这是我的代码 sn-p

 private PublishSubject<Void> firstSubject;
    private PublishSubject<Void> secondSubject;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        loadData();
        mDrawerHeaderView.postDelayed(new Runnable() {
            @Override
            public void run() {
              //  getSecondSubject().onNext(null);
            }
        }, 1000);
        mDrawerHeaderView.postDelayed(new Runnable() {
            @Override
            public void run() {
                getFirstSubject().onCompleted();
            }
        }, 1000);
    }

    protected PublishSubject<Void> createFirstSubject() {
        firstSubject = PublishSubject.create();
        return firstSubject;
    }

    protected PublishSubject<Void> createSecondSubject() {
        secondSubject = PublishSubject.create();
        return secondSubject;
    }

    protected PublishSubject<Void> getFirstSubject() {
        return firstSubject;
    }

    protected PublishSubject<Void> getSecondSubject() {
        return secondSubject;
    }

    private void loadData() {
        Observable<Void> firstSubject = createFirstSubject();
        Observable<Void> secondSubject = createSecondSubject();
        Observable<Boolean> allDataTask = Observable.zip(firstSubject, secondSubject, new Func2<Void, Void, Boolean>() {
            @Override
            public Boolean call(Void aVoid, Void aVoid2) {
                return true;
            }
        });
        allDataTask
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Subscriber<Boolean>() {
                    @Override
                    public void onCompleted() {
                        Notifications.showSuccessMessage(getApplicationContext(), "COMPLETE");
                    }

                    @Override
                    public void onError(Throwable e) {
                        Notifications.showErrorMessage(getApplicationContext(), "ERROR");

                    }

                    @Override
                    public void onNext(Boolean aBoolean) {
                        Notifications.showSuccessMessage(getApplicationContext(), "NEXT");
                    }
                });
    }

在这种情况下,我收到了COMPLETE 消息,但由于第二个主题尚未完成,我原以为什么也得不到。 我做错了什么? 请帮助我获得所需的行为。

【问题讨论】:

标签: java android rx-java observable rx-android


【解决方案1】:

是的,它可以工作as expected。在这里接收onCompleted() 非常有意义,因为如果一个流完成了,只要它发出的所有元素都被“压缩”,就没有办法再“压缩”任何东西,所以它是“完成的”。您还可以使用序列here

【讨论】:

  • 感谢您的回答,请您提供示例如何使用 Rx Java 实现所需的结果
  • 我想等到所有请求都完成
  • @user4598738,请考虑使用forkJoin
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-24
相关资源
最近更新 更多