簡體   English   中英

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請求,每個HTTP請求被延遲500ms。 運算符concatMap()保證Observable會按順序調用。

觀看現場演示: 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));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM