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

rxjava-SwitchMap-为什么它不返回整数流中最新的观测值?

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

    我写了一个简单的代码测试。我创建了一个集成流,并应用了一个开关映射。 from the docs i found online in tutorials throughout :

    另一方面SwithMap()是完全不同于 平面图和ConcatMap。SwitchMap总是返回最新的观测值

     Observable.fromIterable(mutableListOf(1,2,3,4,5,6))
     .switchMap { x-> Observable.just(x)}
     .subscribe{ Timber.d {"my result $it" }}
    

    我希望结果只有一个值。我不知道switch Map是否像concatMap一样是顺序的,但我只期望一个值。

    所以我期待着这样的结果:

    • 我的结果6

    • 我的成绩1我的成绩2我的成绩3我的成绩4我的成绩5我的成绩

    为什么不返回最新的一个并丢弃整数流中的其他可观测值呢?那么switchMap的目的是什么?

    更新:向switchMap添加延迟后,它将执行预期的结果。但我不清楚为什么:

      Observable.fromIterable(mutableListOf(1,2,3,4,5,6))
                    .switchMap { x-> Observable.just(x).delay(1, TimeUnit.SECONDS);}
                    .subscribe{ Timber.d {"my result $it" }}
    

    有什么能帮我解释一下为什么我需要延期。我尝试了以下方法,但没有立即奏效:

     Observable.fromIterable(mutableListOf(1,2,3,4,5,6))
                .switchMap { x-> Observable.just(x)}
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe{ Timber.d {"my result $it" }}
    

    rule about switch map 应该是:SwitchMap只会在特定的延迟后发出最新的可观测数据。它忽略了前面所有的。 它在从提要检索最新数据时非常有用。当您需要在许多提要中标识最新的提要时,它很有用。

    我能确认一下这是正确的吗?

    0 回复  |  直到 6 年前