代码之家  ›  专栏  ›  技术社区  ›  Masquitos

rxjava2合并可观测数据没有停止

  •  0
  • Masquitos  · 技术社区  · 6 年前

    为什么? merge 之后操作员未停止 obs2 未完成?我正在看这本书的图表

    "Reactive Programming on Android with RxJava"
    

    enter image description here

    从我的观点来看,如果任何合并的观测值 onCompleted ,则另一个可观察对象也终止(完成)。

    但事实并非如此。为什么呢?

    这是我的密码。obs1应该在obs2之后终止,但是它是无止境的

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            Button button = findViewById(R.id.btn);
    
            Observable.merge(obs1, obs2)
                    .subscribe(data -> Log.d(TAG, String.valueOf(data)));
        }
    
        Observable<String> obs1 = Observable.interval(1, TimeUnit.SECONDS)
                .map(data -> "obs1: " + data);
    
        Observable obs2 =
                Observable.just(1, 2, 3, 4, 5)
                        .delay(1, TimeUnit.SECONDS)
                        .filter(data -> data < 5)
                        .map(data -> "obs2: " + data)
                        .doOnComplete(() -> Log.d(TAG, "done"));
    
    D/MainActivity: obs1: 0
                    obs2: 1
                    obs2: 2
                    obs2: 3
    D/MainActivity: obs2: 4
                    done
    D/MainActivity: obs1: 1
    D/MainActivity: obs1: 2
    D/MainActivity: obs1: 3
    D/MainActivity: obs1: 4
    D/MainActivity: obs1: 5
    D/MainActivity: obs1: 6
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   gokhan    6 年前

    这是正常的行为,因为第一次观测到的仍然在每秒钟发射一个项目。在调用所观察到的项onComplete方法之前,合并运算符的onComplete方法不会触发