2016-04-19 4 views
3

Ich frage mich, wie kann ich ein Array verarbeiten, wo jeder Wert ein Versprechen in der gleichen Reihenfolge wie sie angegeben werden. Zum Beispiel, sagen wir, ich mehrere Ajax Anrufe in dieser Reihenfolge nennen wollen:Wie benutze ich exhaustMap in ReactiveX/rxjs 5 in TypeScript

var array = [ 
    'http://example.org', 
    'http://otherexample.org', 
    'http://anotherexample.org', 
]; 

Es gibt im Grunde die gleiche Frage: How can I use RxJs to hold off any requests for an AJAX call until the previous one resolves, die schlägt mit flatMapFirst.

Da ich Angular2 (beta-15 in diesem Moment) in TypeScript verwenden, die [email protected] verwendet, habe ich herausgefunden, dass flatMapFirst has been renamed to exhaustMap.

Aber dieser Operator ist nicht aufgeführt in Observable.ts, daher kann ich es nicht verwenden. Es ist nicht einmal in der mitgelieferten Version von RxJS https://code.angularjs.org/2.0.0-beta.15/Rx.js vorhanden.

Also, wie soll ich es verwenden? Oder gibt es einen anderen Weg zu dem, was ich brauche? Sein package.json listet viele Build-Skripte auf, sollte ich es zwingen, einen von ihnen zu verwenden?

Edit: Ich sollte erwähnen, ich bin mit ReactiveX/rxjs Bibliothek, nicht Reactive-Extensions/RxJS

+3

Basierend auf der Problembeschreibung Vielleicht möchten Sie stattdessen 'concatMap' verwenden. Es klingt wie Sie alle Anfragen verarbeiten möchten, ohne wegzuwerfen. – Brandon

+1

Sie haben Recht, concatMap hat getan, was ich brauche. – martin

Antwort

3

Operator concatMap() hat seinen Zweck erfüllt:

import { Observable } from 'rxjs/Observable'; 
import 'rxjs/add/operator/concatMap'; 

var urls = [ 
    'https://httpbin.org/get?1', 
    'https://httpbin.org/get?2', 
    'https://httpbin.org/get?3', 
    'https://httpbin.org/get?4', 
    'https://httpbin.org/get?5', 
];  

Observable.from(this.urls) 
    .concatMap(url => http.get(url)) 
    .subscribe(response => console.log(response.url)) 
; 

Diese Drucke zu trösten:

https://httpbin.org/get?1 
https://httpbin.org/get?2 
https://httpbin.org/get?3 
https://httpbin.org/get?4 
https://httpbin.org/get?5