当任何主题完成时,Rx Java zip完成

时间:2017-01-25 19:31:33

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

我正面临着这个问题。据我所知,来自zip的{​​{1}}方法等待所有可观测量完成。

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

这是我的代码段

RxJava

在这种情况下,我收到了 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"); } }); } 消息,但由于第二个主题未完成,我期待什么都没有得到。 我做错了什么? 请帮助我获得理想的行为。

1 个答案:

答案 0 :(得分:2)

是的,它有效as expected。在这里接收onCompleted()是完全合理的,因为如果一个流完成,只要它发出的所有元素都是&#34;压缩&#34;,就没有办法#34} ;拉链&#34;更多,所以它已经完成了#34;。您还可以使用序列here