如何按顺序执行Observable数组,只有在前一个Observable完成后才执行下一个?

7

假设我动态创建了一个可观察数组:

let obsArray = dataArray.map((data) => observableFunc(data))

我想按顺序执行这些可观察对象,只有在obsArray[n]完成后才执行obsArray[n+1]。下一个可观察对象的执行并不依赖于前一个可观察对象的结果。
在数组中的每个可观察对象完成后,我希望从处理这些可观察对象的函数中返回。
基本上,我想找到一种类似于forkJoin的方法来确保顺序执行。

我认为concat()的签名不接受数组。再看一次,也许我错了?编辑:算了,它不会接受可观察的数组。 - Connor O'Doherty
这个问题与已标记为有答案的问题不同。这个问题是关于可观察数组而不是独立的可观察对象。我遇到了相同的问题,即按顺序触发可观察数组。 - Chrillewoodz
1个回答

10

如前所述,concat操作符可以将发出的值排成一行。您可以将可观察数组传递给它,如下所示(感谢ES6扩展运算符!):

const obsArray = [
  Rx.Observable.of(1, 2, 3), 
  Rx.Observable.of(4, 5, 6), 
  Rx.Observable.of(7, 8, 9)];

const example = Rx.Observable.concat(...obsArray);
// or using old apply method
// Rx.Observable.concat.apply(this, obsArray); 

// prints: 1,2,3,4,5,6,7,8,9
const subscribe = example.subscribe(val => console.log(val));

1
使用函数提供concat运算符的值时,此方法无效。 - Chrillewoodz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接