【问题标题】:concatMap vs flatMapconcatMap 与 flatMap
【发布时间】:2018-04-29 01:09:11
【问题描述】:

我对来自concatMapprefetch 参数感到困惑,它基本上听起来像MAX_CONCURRENCY

prefetch:从当前 Observable 中预取的元素个数

Q1:是指从Observable预取元素进行映射,然后依次订阅一个吗?

例如,concatMapSingle 的文档非常清楚:

将上游项目映射到 SingleSources 并订阅它们 在另一个成功后,发出他们的成功值或终止 如果此 Observable 或当前内部 单源失败。

Q2concatMap的doc是不是可以改写为:

将上游项目映射到 ObservableSources 并订阅它们 一个接一个完成?

concatMap 的原始文档版本:

返回一个新的 Observable,该 Observable 发出通过应用 您为源发出的每个项目提供的函数 ObservableSource,该函数返回一个 ObservableSource,以及 然后发出通过连接那些产生的项目而产生的项目 可观察的来源。

即以下几行基本相同(就MAX_CONCURRENCY而言)?

int MAX_CONCURRENCY = 1;
Observable.just(1, 2, 3).flatMap(num -> Observable.just(num), false, MAX_CONCURRENCY);
Observable.just(1, 2, 3).concatMap(num -> Observable.just(num));

【问题讨论】:

    标签: rx-java reactive-programming


    【解决方案1】:

    Q1:是指从 Observable 中预取元素进行映射,然后依次订阅一个吗?

    concatMap 的当前实现中,上游项目被预取,但直到前一个内部源完成(或者它是第一个项目)才被映射。内部源是一个接一个运行的。

    Q2:concatMap的doc是不是可以改写成:

    我还要在第一句话中提到错误行为,就像concatMapSingle 一样。欢迎公关。

    一些较旧的 javadoc 措辞有些复杂,而新的 javadocs 则更简洁。那些旧的也让我很烦,但除非他们需要一些扩展 - 由于 StackOverflow 问题/对它们的误解增加 - 我倾向于不理会它们。

    以下几行基本相同(就MAX_CONCURRENCY而言)?

    使用Observables,没有背压,因此concatMapflatMap 都必须将上游项目排队,直到它们准备好被映射和订阅。 concatMapprefetch 提示应该更像 capacityHint,因为它用于调整包含额外值的内部队列的大小。

    【讨论】:

      【解决方案2】:

      TL;DR:这是真的。找到答案on GitHub

      【讨论】:

      • 我想知道FlowableconcatMap()prefetch 参数,默认为2。
      猜你喜欢
      • 2018-09-16
      • 2019-05-21
      • 1970-01-01
      • 1970-01-01
      • 2016-07-08
      • 1970-01-01
      • 1970-01-01
      • 2010-11-06
      • 1970-01-01
      相关资源
      最近更新 更多