SwitchMap具有延迟的可观察性

时间:2018-01-04 11:01:24

标签: java android rx-java reactive-programming

 Observable
     .interval(2, TimeUnit.SECONDS)
     .switchMap(integer -> 
        Observable
                 .just(integer * 2) 
                 .delay(5,SECONDS))
     .subscribe(integer -> { System.out.println(integer);});

据我了解,在切换映射后我们应该订阅最后创建的observable,所以我希望在20秒后输出“8”,但它会永远等待

1 个答案:

答案 0 :(得分:1)

switchMap()运算符的操作如下:

  1. 接收上游发布的值
  2. 使用发出的值调用function参数,该值必须是可观察的
  3. 订阅observable
  4. 发出可观察的任何项目
  5. 从上游发出新项目时,请取消订阅步骤3中的观察项目,然后从步骤2开始。
  6. 结果是延迟的observable将永远不会发出任何东西,因为它将每2秒取消一次。

    您需要使用flatMap()运算符,而不会取消订阅每个发布的值。