我有一个Observable Obs1 ,它是使用方法from
从对象数组开始创建的。
假设Array有10个对象,这意味着 Obs1 会发出10次然后终止。
对于 Obs1 发出的每个对象,我想执行一个返回Observable的函数。因此,函数返回的Observable与Array的元素数量相同,我们称之为 Obs2-1 Obs2-2 ... Obs2- 10 即可。这样的Observable只发出一个值,然后完成。
我想以某种方式将 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>)
r-w-files(files: Array<string>)
完成r-w-files(files:
Array<string>)
有没有办法用Observable运算符实现这样的逻辑?
答案 0 :(得分:2)
要按顺序切换Observable,可以使用 concatMap :
Rx.Observable.from(['value 1', 'value 2', 'value 3'])
.concatMap(value => createNewObservable(value))
.subscribe()
concatMap 等到之前创建的Observable完成后才切换到下一个。