2016-11-27 2 views
1

У меня есть массив чисел, как это: [1, 2, 3], а также HTTP-сервис, который имеет функцию для загрузки объекта данных по номеру, как это:Угловые 2 & RxJS: карта массива с помощью Rx Наблюдаемого

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

Как сопоставить мой первоначальный массив чисел с массивом объектов, сохраняющих порядок элементов?

ответ

0

Благодаря @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)); 
2

Оператор 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() гарантирует, что Наблюдатели будут в порядке.

Смотреть демо: https://jsbin.com/subuxo/edit?js,console

+0

1) Я хочу Наблюдаемые называться одновременно, а не в порядке, я хочу, чтобы результаты были в порядке , 2) Я хочу вернуть полученный массив, а не отдельные значения. – Rem

+0

@Rem. Вам нужно сформулировать свой вопрос лучше. Вы нигде не указали, что хотите запустить запрос параллельно. Кстати, посмотрите на 'forkJoin' оператор. – martin

+0

спасибо за подсказку! – Rem

Смежные вопросы