我有多个热门观察者可能会或可能不会发出物品。因此,我希望组合observable,然后处理结果,如果它们中的任何一个发出结果,但如果其他observable发出项目,它们应该一起处理。
例如
observable1 = PublishSubject<>()
observable2 = PublishSubject<>()
observable1.onNext(1)
observable1.onNext(2)
observable2.onNext("Test")
observable1.onNext(3)
应该发出:
(1, null)
(2, null)
(2, "Test")
(3, "Test")
observable2
observable1
也可能会发出jQuery.serialize()
CombineLatest
最接近我的需要,但只有在所有可观察者发出至少一个项目时才会发出结果。是否有反应操作员?
答案 0 :(得分:2)
您可以对每个源使用BehaviorSubject
来提供初始值,或者使用带有初始值的combineLatest
,然后对这些增强的Observable应用null
。但是,在RxJava 2中不允许PublishSubject<Integer> observable1 = PublishSubject.create()
PublishSubject<String> observable2 = PublishSubject.create()
Observable.combineLates(
observable1.startWith(-100000),
observable2.startWith(""),
(a, b) -> a + b
)
.subscribe(System.out::println)
;
observable1.onNext(1)
observable1.onNext(2)
observable2.onNext("Test")
observable1.onNext(3)
,因此您必须在可观察元素类型中找到中性值。
BehaviorSubject<Integer> observable1 = BehaviorSubject.createDefault(-10000)
BehaviorSubject<String> observable2 = BehaviorSubject.createDefault("")
Observable.combineLates(
observable1,
observable2,
(a, b) -> a + b
)
.subscribe(System.out::println)
;
observable1.onNext(1)
observable1.onNext(2)
observable2.onNext("Test")
observable1.onNext(3)
或
<button id="ButtonCalc" label="Re-Calculate" size="large" onAction="calc" image="Calculate" getEnabled="disableRefresh"/>