组合2个可观察物体,以便只有当第二个发射时才发出下一个值

我有一个Observable Obs1已使用从对象数组开始的方法from创建。组合2个可观察物体,以便只有当第二个发射时才发出下一个值

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

对于由发出的每个对象Obs1我想执行一个返回Observable的函数。因此,相同数量的数组的元素由函数返回的观测量,我们姑且称之为Obs2-1Obs2-2 ... Obs2-10。这些观测值只发出1个值,然后完成。

我想以某种OBS1链接到一系列的观测量Obs2-1的...... Obs2-10使OBS1发出其(N + 1)个值时OBS2 - n发出。

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

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

我所想象是有组块的缓冲器的特定形式,其

  • 发射第一组块,并将其传递到r-w-files(files: Array<string>)
  • 它然后等待,直到可观察到由 r-w-files(files: Array<string>)返回完成
  • 一旦它完成它通过第二个块到r-w-files(files: Array<string>)
  • 等等

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

回答:

要切换顺序观测量,你可以使用concatMap:

Rx.Observable.from(['value 1', 'value 2', 'value 3']) 

.concatMap(value => createNewObservable(value))

.subscribe()

concatMap等待,直到先前创建的可观测完成切换到下一个之前。

以上是 组合2个可观察物体,以便只有当第二个发射时才发出下一个值 的全部内容, 来源链接: utcz.com/qa/257587.html

回到顶部