【发布时间】:2018-05-16 14:08:02
【问题描述】:
我有一个 Observable Obs1,它是使用方法 from 从对象数组开始创建的。
假设 Array 有 10 个对象,这意味着 Obs1 发射 10 次然后终止。
对于 Obs1 发出的每个对象,我想执行一个返回 Observable 的函数。因此,函数返回的 Observable 与 Array 的元素数量相同,我们称它们为 Obs2-1 Obs2-2 ... Obs2- 10。这样的 Observable 只发出 1 个值然后完成。
我想以某种方式将 Obs1 链接到一系列 Observables Obs2-1 ... Obs2-10 以便 Obs1 在 Obs2-n 发射时发射其第 (n+1) 个值。
一个真实的例子可以让这件事更清楚。假设我有一个字符串数组。每个字符串都是一个文件的名称。我有一个函数r-w-files(files: Array<string>),它读取列表中的每个文件并将其写入另一个目录。
我想对大量文件执行这个读写逻辑,因此,为了避免同时打开太多文件,我想将大的初始列表分成更小的块,然后用顺序处理它们函数r-w-files(files: Array<string>)。
我想象的是有某种形式的块缓冲区
- 发射第一个块并将其传递给
r-w-files(files: Array<string>) - 然后它等待直到 Observable 返回
r-w-files(files: Array<string>)完成 - 一旦完成,它会将第二个块传递给
r-w-files(files: Array<string>) - 等等
有没有办法用 Observable 操作符来实现这样的逻辑?
【问题讨论】:
-
你见过zip operator吗?
-
感谢您的回答 - 不幸的是,我最初的问题并不是很清楚,也没有解释我面临的全部问题 - 我已经用更多细节编辑了这个问题(zip 运算符会与我原来的问题,但不是我真正的问题,无论如何谢谢)
-
你不需要
bufferCount吗?
标签: rxjs observable reactive-programming reactive