组合 2 个 Observables,使一个仅在第二个发出时发出下一个值

Combining 2 Observables so that one emits the next value only when the second emits

我有一个 Observable Obs1,它是使用方法 from 从对象数组开始创建的。

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

对于 Obs1 发出的每个对象,我想执行一个 returns Observable 的函数。因此,函数返回的 Observables 与 Array 的元素数量相同,我们称它们为 Obs2-1 Obs2-2 .. . Obs2-10。这样的 Observables 只发出 1 个值然后完成。

我想 link 以某种方式 Obs1 到一系列 Observables Obs2-1 ... Obs2-10 以便 Obs1Obs2- n 发射。

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

我想对大量文件执行此读写逻辑,因此,为了避免同时打开太多文件,我想将较大的初始列表分成较小的块,然后依次处理它们函数 r-w-files(files: Array<string>).

我想象的是拥有某种形式的块缓冲区

有什么方法可以用 Observable 运算符实现这样的逻辑吗?

顺序切换Observables,可以使用concatMap:

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

concatMap 等待之前创建的 Observable 完成后再切换到下一个。