【问题标题】:Rxjs Observable run sequentially and return an arrayRxjs Observable 顺序运行并返回一个数组
【发布时间】:2018-08-31 00:54:22
【问题描述】:
var arr = [obs1, obs2, obs3];
Observable.forkJoin(...arr).subscribe(function (observableItems) {})

并行运行 observables 并返回一个数组。

如何按顺序运行可观察对象返回一个数组。我不想被每个 observable 调用,所以concat() 不适合我。

我希望收到与forkJoin 相同的最终结果,但按顺序运行。

它存在吗?还是我必须编写自己的可观察模式?

【问题讨论】:

  • 看来您正在寻找合并...(即使它不返回数组)
  • 为什么不能选择 concat? - 您可以在连接结果上调用 toArray。
  • Concat 不是一个选项,因为他希望它们在 // 中运行,concat 不会在 // 中运行它们

标签: rxjs observable


【解决方案1】:

只需使用concat,然后使用toArray

var arr = [obs1, obs2, obs3];
Observable.concat(...arr).toArray().subscribe(function (observableItems) {})

如果您需要行为,更类似于forkJoin(仅获取每个可观察对象的最后结果),正如@cartant 在评论中提到的那样:您需要在连接它们之前对可观察对象应用last 运算符:

Observable
  .concat(...arr.map(o => o.last()))
  .toArray()
  .subscribe(function (observableItems) {})

【讨论】:

  • 您将需要将last 运算符与源可观察对象一起使用,因为forkJoin 发出一个可观察对象的最终值数组,而concat 将发出整个值流.
  • 是的,好点 - 你是对的,行为有点不同。将添加此答案。
  • 非常感谢。我可以扔掉我写的自定义订阅者/可观察模式! @cartant 得到一些巧克力蛋糕积分。
猜你喜欢
  • 2021-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-28
  • 2020-07-10
  • 2021-06-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多