【问题标题】:RxJava Observable combineLatest reset stateRxJava Observable combineLatest 重置状态
【发布时间】:2015-07-02 19:50:33
【问题描述】:

基于官方文档的漂亮图表,combineLatest http://reactivex.io/documentation/operators/combinelatest.html

我想知道是否有办法,比如当我从第二个 Observable 收到“C”时,我想清除第一个和第二个 Observable 内部的状态。这样当“D”从第二个 Observable 到达时,它将不再与来自第一个 Observable 的“2”结合,而是等到“3”到达。

【问题讨论】:

    标签: rx-java


    【解决方案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");
    

    这样,您可以终止组合的第一个“会话”并开始一个新的。

    【讨论】:

    • 这里我不明白repeat(2)的用法。它只适用于两个“C”,而不适用于三个,对吧?使用repeat() 不是更好(或更合适)吗?
    猜你喜欢
    • 2021-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多