Sequentially execute observables and emit one result

As Jota.Toledo or Mateusz Witkowski showed in their answers, with the new syntax of RxJS you can do:

return concat(...observables).pipe(toArray());

Assuming that your observables emit singular values, not arrays, you could rework your current approach to something like:

return Observable.concat(...observables).reduce((acc, current) => [...acc, current], []);

or even shorter:

return Observable.concat(...observables).toArray();

In the case that they emit array values, you could do the following:

const source = Observable.concat(...observables).flatMap(list => list).toArray();

You can you use toArray() operator:

Observable.concat(observables).toArray().subscribe()

As stated in RxJS documentation: it creates "an observable sequence containing a single element with a list containing all the elements of the source sequence".