2016-01-26 6 views
10

Ich versuche einen RESTful-Endpunkt abzufragen, um meine Live-Chat-Nachrichten zu aktualisieren. Ich weiß, der beste Ansatz für einen Live-Chat wäre WebSockets, ich versuche nur zu verstehen, wie RxJS mit Angular 2 funktioniert.Angular 2 Polling mit RxJS

Ich möchte jede Sekunde nach neuen Nachrichten suchen. Ich habe den folgenden Code:

return Rx.Observable 
    .interval(1000) 
    .flatMapLatest(() => this.http.get(`${AppSettings.API_ENDPOINT}/messages`)) 
    .map(response => response.json()) 
    .map((messages: Object[]) => { 
     return messages.map(message => this.parseData(message)); 
    }); 

jedoch meine Typoskript Transpiler kehrt diesen Fehler:

Property 'flatMapLatest' does not exist on type 'Observable<number>'

Ich verwende RxJS 5.0.0-beta.0

Wenn ich Druck verwenden anstelle von flatMapLatest es ruft die API überhaupt nicht auf.

Antwort

8

Sie müssen switchMap() verwenden, gibt es keine flatMapLatest() in RxJS 5.

Migrating from RxJS 4 to 5

ansehen ... Obwohl docs über switchMap() nicht ganz klar sind ...

Returns a new Observable by applying a function that you supply to each item emitted by the source Observable that returns an Observable, and then emitting the items emitted by the most recently emitted of these Observables.

+1

Wie erhalte ich die JSON aus switchMap? Typescript gibt diesen Fehler zurück: Die Eigenschaft 'json' existiert nicht beim Typ '{}' – AndreFeijo

+0

Versuchen Sie 'map()' herauszuziehen und tun Sie dies nach 'switchMap()'. Ich habe es nicht selbst benutzt, und Docs sind keine Hilfe (; – Sasxa

+5

Falls jemand sich fragt, wie man den Json aus switchMap holt, müssen Sie es wie folgt eingeben: '.map ((res: Response) => res.json()) '. Stellen Sie sicher, Sie importiert ** Antwort ** von ** 'angular2/http' ** – AndreFeijo