Rxjs Observable按顺序运行并返回一个数组

jsg*_*pil 7 observable rxjs

var arr = [obs1, obs2, obs3];
Observable.forkJoin(...arr).subscribe(function (observableItems) {})
Run Code Online (Sandbox Code Playgroud)

并行运行observable并返回一个数组.

如何顺序运行observable 返回一个数组.我不想为每个观察者打电话,所以concat()不适合我.

我想收到相同的最终结果,forkJoin但顺序运行.

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

Bog*_*luk 14

只需使用concat然后toArray:

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

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

Observable
  .concat(...arr.map(o => o.last()))
  .toArray()
  .subscribe(function (observableItems) {})
Run Code Online (Sandbox Code Playgroud)

  • 您将需要对源 observable 使用 `last` 运算符,因为 `forkJoin` 会发出一个由 obserfable 的最终值组成的数组,而 `concat` 会发出整个值流。 (3认同)