2017-12-02 238 views
0

我有一个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运算符来实现这样的逻辑吗?

+0

你见过[zip运营商](http://reactivex.io/documentation/operators/zip.html)吗? –

+0

感谢您的答案 - 不幸的是我原来的问题不是很清楚,也没有解释我面临的全部问题 - 我已经编辑了更多细节问题(zip操作符会处理我原来的问题,但不是我真正的问题,无论如何感谢) – Picci

+0

难道你只是需要['bufferCount'](https://github.com/ReactiveX/rxjs/blob/master/src/operators/bufferCount.ts)? –

回答

2

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

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

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

+0

感谢您的答案 - 不幸的是我原来的问题不是很清楚,也没有解释我面临的全部问题 - 我已经编辑了更多细节问题(zip操作符会处理我的原始问题,但不是我真正的问题,谢谢反正) – Picci

+0

我更新了我的答案 – ZahiC

+0

作品像魅力 - 非常感谢 – Picci

相关问题