Angular 2 & RxJS:使用 Rx Observable 映射一个数组

Angular 2 & RxJS: map an array using Rx Observable

我有一个这样的数字数组:[1, 2, 3],以及具有按数字加载数据对象功能的 HTTP 服务:

function get(id: number): Observable<object>

如何将我的原始数字数组映射到保留元素顺序的对象数组?

您可以使用 concatMap 运算符。

const Observable = Rx.Observable;

function mockHttpRequest(i) {
  return Observable.of(i).delay(500);
}

Observable.from([1, 2, 3])
    .concatMap(i => mockHttpRequest(i))
    .subscribe(data => console.log(data));

这模拟多个 HTTP 请求,每个请求延迟 500 毫秒。运算符 concatMap() 保证 Observables 将按顺序调用。

观看现场演示:https://jsbin.com/subuxo/edit?js,console

感谢@martin,我找到了这个解决方案:

const myPromise = val => new Promise(resolve => setTimeout(() => resolve(`Promise Resolved: ${val}`), 
                                                          Math.round(Math.random() * 1000 + 1000)))
const queue = Rx.Observable.of([1,2,3,4,5]);
const result = queue
  .mergeMap(q => Rx.Observable.forkJoin(...q.map(myPromise)));
const subscribeTwo = result.subscribe(val => console.log(val));