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

组合2个观察值,使一个仅在第二个发射时发射下一个值

  •  0
  • Picci  · 技术社区  · 7 年前

    我有一个可观察的 Obs1 已使用该方法创建 from 从一组对象开始。

    假设数组有10个对象,这意味着 发射10次,然后终止。

    对于发射的每个对象 Obs1 我想执行一个函数,返回一个可观察的。因此,函数返回的可观测值与数组元素的数量相同,让我们调用它们 Obs2-1 Obs2-2 ... Obs2-10 . 这样的观察值只发出一个值,然后完成。

    我想以某种方式链接 Obs1 到一系列观察值 Obs2-1 ... Obs2-10 因此 Obs1 发射its (n+1)-第个值 什么时候 Obs2- n 发射。

    一个真实的例子可以使这件事更清楚。假设我有一个字符串数组。每个字符串都是文件名。我有一个函数 r-w-files(files: Array<string>) 它读取列表中的每个文件并将其写入另一个目录。

    我想对大量文件执行这种读写逻辑,因此,为了避免同时打开太多文件,我想将大的初始列表划分为较小的块,然后用函数顺序处理它们 r-w文件(文件:数组<字符串>) .

    我想象的是有一种特定形式的块缓冲区

    • 发出第一个块并将其传递给 r-w-files(files: Array<string>)
    • 然后等待,直到 r-w文件(文件:数组<字符串>) 完成
    • 完成后,将第二个块传递给 r-w文件(文件: 阵列(<);字符串(>)
    • 等等

    有没有办法用可观察算子实现这种逻辑?

    1 回复  |  直到 7 年前
        1
  •  2
  •   ZahiC    7 年前

    要按顺序切换观察值,可以使用 连接图 :

    Rx.Observable.from(['value 1', 'value 2', 'value 3'])
      .concatMap(value => createNewObservable(value))
      .subscribe()
    

    连接图 等待之前创建的可观察对象完成后再切换到下一个。