【发布时间】:2016-11-27 08:47:00
【问题描述】:
我有一个这样的数字数组:[1, 2, 3],并且 HTTP 服务具有按数字加载数据对象的功能,如下所示:
function get(id: number): Observable<object>
如何将我的原始数字数组映射到保留元素顺序的对象数组?
【问题讨论】:
标签: angular typescript rxjs rxjs5
我有一个这样的数字数组:[1, 2, 3],并且 HTTP 服务具有按数字加载数据对象的功能,如下所示:
function get(id: number): Observable<object>
如何将我的原始数字数组映射到保留元素顺序的对象数组?
【问题讨论】:
标签: angular typescript rxjs rxjs5
您可以使用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 毫秒。 Operator concatMap() 保证 Observable 将按顺序调用。
【讨论】:
forkJoin 运营商。
感谢@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));
【讨论】: