TypeScript - Angular 2 interogare periodică cu RxJS
Încerc să interoghez un endpoint RESTful pentru a reîmprospăta mesajele de chat live. Știu că cea mai bună abordare pentru un chat live ar fi Websockets, doar încerc să înțeleg cum funcționează RxJS cu Angular 2.
Vreau să verific dacă sunt mesaje noi la fiecare secundă. Am următorul cod:
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));
});
Totuși, transpilerul meu TypeScript returnează această eroare:
Proprietatea 'flatMapLatest' nu există pe tipul 'Observable
'
Folosesc RxJS 5.0.0-beta.0
Dacă folosesc merge în loc de flatMapLatest, API-ul nu este apelat deloc.
Răspuns #1
Trebuie să folosești switchMap(), nu există flatMapLatest() în RxJS 5.
Vezi Migrarea de la RxJS 4 la 5... Deși documentația nu este foarte clară în legătură cu switchMap()...
Returnează un nou Observable prin aplicarea unei funcții pe care o furnizați fiecărui element emis de Observable-ul sursă care returnează un Observable, și apoi emițând elementele emise de cel mai recent dintre aceste Observables emise.
Răspunsul #2
Pentru a explica puțin mai mult răspunsul lui @Sasxa.
SwitchMap în ilustrație. (de la http://reactivex.io/documentation/operators.html)
