Rxjs Observable按顺序运行并返回一个数组
并行运行可观察对象并返回一个数组 如何按顺序运行可观测项并返回数组。我不希望每个可观察对象都被调用,因此Rxjs Observable按顺序运行并返回一个数组,rxjs,observable,Rxjs,Observable,并行运行可观察对象并返回一个数组 如何按顺序运行可观测项并返回数组。我不希望每个可观察对象都被调用,因此concat()不适合我 我希望收到与forkJoin相同的最终结果,但按顺序运行 它存在吗?或者我必须编码我自己的可观察模式吗?只需使用concat然后toArray: var arr = [obs1, obs2, obs3]; Observable.forkJoin(...arr).subscribe(function (observableItems) {}) 如果您需要行为,更类似于
concat()
不适合我
我希望收到与forkJoin
相同的最终结果,但按顺序运行
它存在吗?或者我必须编码我自己的可观察模式吗?只需使用
concat
然后toArray
:
var arr = [obs1, obs2, obs3];
Observable.forkJoin(...arr).subscribe(function (observableItems) {})
如果您需要行为,更类似于forkJoin
(仅从每个观察对象获取最后的结果),如@cartant在注释中所述:您需要在连接观察对象之前对其应用last
运算符:
var arr = [obs1, obs2, obs3];
Observable.concat(...arr).toArray().subscribe(function (observableItems) {})
看来你在找合并。。。(即使它不返回数组)为什么concat不是一个选项您可以在连接结果上调用toArray。Concat不是一个选项,因为他希望它们在//中运行,Concat不会在//中运行它们。您需要对源观测值使用
last
操作符,因为forkJoin
会发出obserfables的最终值数组,而concat
会发出整个值流。是的,很好的一点-你是对的,行为有点不同。我将把这个添加到答案中。非常感谢。我可以扔掉我写的自定义订户/可观察模式@卡坦特得到了一些布朗尼点数。
Observable
.concat(...arr.map(o => o.last()))
.toArray()
.subscribe(function (observableItems) {})