基于官方文档中的漂亮图表,combineLatest http://reactivex.io/documentation/operators/combinelatest.html
我想知道是否有办法,比如当我收到" C"从第二个Observable,我想清除第一个和第二个Observable中的状态。这样当" D"从第二个Observable到达,它将不再与" 2"从第一个Observable开始,但等到" 3"到达。
答案 0 :(得分:1)
解决您确切问题的方法是发布每个来源,直到触发值,然后将您的链重新订阅到来源:
PublishSubject<Integer> a = PublishSubject.create();
PublishSubject<String> b = PublishSubject.create();
ConnectableObservable<Integer> ap = a.publish();
ConnectableObservable<String> bp = b.publish();
Observable.combineLatest(
ap, bp,
Pair::of
)
.takeUntil(p -> "C".equals(p.second))
.repeat(2)
.subscribe(System.out::println)
;
ap.connect();
bp.connect();
a.onNext(1);
b.onNext("A");
a.onNext(2);
b.onNext("B");
b.onNext("C");
a.onNext(3);
b.onNext("D");
这样,您就可以终止第一个会话&#39;组合并开始一个新的。