角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()保证观察结果将按顺序排列。

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

+0

1)我想观测量可以同时调用,而不是为了我想要的结果是为了。 2)我想要返回结果数组,而不是单个值 – Rem

+0

@Rem他们需要更好地表达您的问题。你没有提到任何你想要并行运行请求的地方。顺便说一句,看看'forkJoin'运算符。 – martin

+0

谢谢你的提示! – Rem