角2&RxJS:使用映射的阵列的Rx可观察
问题描述:
我有号码的一个这样的数组:[1,2,3],和HTTP具有功能由数这样来加载数据对象服务:角2&RxJS:使用映射的阵列的Rx可观察
function get(id: number): Observable<object>
如何将我的原始数组数组映射到保存元素顺序的对象数组?
答
感谢@马丁,我发现这个解决方案:
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));
答
您可以使用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请求,其中每个HTTP请求延迟500ms。运营商concatMap()
保证观察结果将按顺序排列。
1)我想观测量可以同时调用,而不是为了我想要的结果是为了。 2)我想要返回结果数组,而不是单个值 – Rem
@Rem他们需要更好地表达您的问题。你没有提到任何你想要并行运行请求的地方。顺便说一句,看看'forkJoin'运算符。 – martin
谢谢你的提示! – Rem