我有一个可观察的Obs1,它是从一个对象数组开始使用from
方法创建的。
假设数组有10个对象,这意味着Obs1发射10次,然后终止。
对于Obs1发出的每个对象,我希望执行一个函数,该函数返回一个可观察的函数。因此,函数返回的可观测值与数组元素的数目相同,让我们称它们为Obs2-1 Obs2-2 . Obs2-10。这样的观测值只发出一个值,然后就完成了。
我想以某种方式将Obs1与一系列可观测数据( Obs2-1 . Obs2-10 )联系起来,以便Obs1在发射时发出(n+1)-th值。
一个真实的例子可以使这件事变得更清楚。假设我有一个字符串数组。每个字符串都是一个文件的名称。我有一个函数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>)
有没有办法用可观察的运算符来实现这样的逻辑?
发布于 2017-12-02 18:16:09
要按顺序切换可观测值,可以使用concatMap
Rx.Observable.from(['value 1', 'value 2', 'value 3'])
.concatMap(value => createNewObservable(value))
.subscribe()
concatMap在切换到下一个可观察性之前,一直等到先前创建的可观察性完成。
https://stackoverflow.com/questions/47610838
复制相似问题