2016-09-20 46 views
-1

我需要觸發幾個可觀察到的可以操作的類,然後知道它們何時都已達到其狀態onCompleted在onCompleted中獲取可觀察的目標

我目前的看法是通過將它們添加到集合中來追蹤RxJava observables的完成情況,然後我們希望在它們的onCompleted()方法觸發時將它們從集合中移除。

如何從onCompleted獲取可觀察對象本身?

予訂閱像這樣:

c.event().subscribe(this); 

而且由this表示的對象實現觀察,並具有onCompleted方法。

如何獲得this.onCompleted()中的可觀察目標?


我試圖根據帕帕佐Bassoukos建議如下解決方案,但它什麼都不做:

Set<Observable<Void>> obs = new HashSet<Observable<Void>>(); 
//... 
c.event().subscribe(this); 
obs.add(c.event()); 
c2.event().subscribe(this); 
obs.add(c2.event()); 
//... 
Observable.merge(obs).lastOrDefault(null).doOnNext(foo -> { 
    System.out.println("All Observers Done"); 
}); 

的完成消息從未版畫,雖然每個觀察者已經達到onCompleted()方法的所有觀察員。

+0

也許是遠射:'c.event()'? :) – marstran

+0

@marstran - 我實際上使用lambda來縮短例子,但相反,它使它看起來像一個愚蠢的問題:)。我只是改變了這個問題,以反映真實情況 – mtyson

+0

哦,我想我誤讀了。我認爲我讀「可觀察」而不是「觀察者」。 – marstran

回答

1

我需要觸發幾個可觀察類來執行,然後知道它們何時都已達到onCompleted狀態。

Observable.merge(A,B,C).lastOrDefault(null).doOnNext(dummy -> {...}) 

但是,您可能需要使用實用的風格,如果源觀測有相同數量的元素,你想要做somethinf對自己的成績:

Observable.zip(A,B,C, (a,b,c) -> {....}); 

編輯:哦,現在我明白了 - 試試這個吧:

Observable 
.merge(c1.ecent(), c2.event()) 
.doOnCompleted(() -> System.out.println("All Observers Done")) 
.subscribe(this); 
+0

我給了那一槍,但它沒有按我的預期工作。更新的問題。 – mtyson

+0

爲什麼你需要將'this'訂閱到observables? –

+0

我已經使用可能適合您的解決方案編輯了我的答案。 –