2015-10-06 41 views
3

當我使用Observable.first()運算符,我得到消息拋出:IllegalArgumentException「序列包含了太多的元素」。RxJava:拋出IllegalArgumentException時使用「第一」運營商

這裏是一個簡化的測試代碼可以重現例外:

Subject<Integer, Integer> subject = BehaviorSubject.create(); 

subject.first() 
     .subscribe(integer -> subject.onNext(1)); 

subject.onNext(0); 

這些代碼是從一個非常複雜的現實項目中提取的,我不認爲我可以很容易解釋爲什麼我要做這個奇怪的東西。

所以我只想問一個問題: 這是RxJava錯誤,還是一個不正確使用由我自己?

如果一個不正確的使用,我想我需要重寫邏輯,以避免這些代碼。

非常感謝。

回答

3

有一個known bug帶有重入問題的take操作符(由第一個使用),下一個版本1.0.15將包含該修訂。沒有ETA,對不起。

順便說一句,如果這個bug都沒有了,爲什麼你在你的代碼做這件事情?你想向其他用戶發送信號嗎?

編輯

解決方法:

任何操作員做的系列化,可用於周圍的bug工作。也許最簡單的是使用BehaviorSubject.create().toSerialized()

+0

謝謝你的答覆。是的,主題是實現一個數據存儲單例,它有很多觀察者正在監聽數據變化。 subject.first()塊和subject.onNext(0)塊由不同部分的代碼調用(代碼的每個部分都有一個更新數據存儲的步驟)。 – Tankery

+0

並感謝您的解決方法,它的工作原理。 – Tankery