首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >将两个可观测值组合在一起,这样,只有当第二个观测值发出时,一个才会发出下一个值。

将两个可观测值组合在一起,这样,只有当第二个观测值发出时,一个才会发出下一个值。
EN

Stack Overflow用户
提问于 2017-12-02 17:57:17
回答 1查看 474关注 0票数 0

我有一个可观察的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>)
  • 诸若此类

有没有办法用可观察的运算符来实现这样的逻辑?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-02 18:16:09

要按顺序切换可观测值,可以使用concatMap

代码语言:javascript
代码运行次数:0
运行
复制
Rx.Observable.from(['value 1', 'value 2', 'value 3'])
  .concatMap(value => createNewObservable(value))
  .subscribe()

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47610838

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档