Voglio creare un osservabile che restituisca i dati da un webapi. Mi piacerebbe che restituisse immediatamente i dati e interrogare l'API ogni 10 secondi. Il codice qui sotto mostra che sto usando il metodo 'interval'. Ma questo ritarda il primo set di dati di 10 secondi. Come faccio a far sì che il primo flusso di dati venga giù senza alcun ritardo iniziale?Come ottenere un osservabile per restituire i dati immediatamente e successivamente ogni 5 secondi. Usa intervallo()?
export class EventService {
public events$: Observable<Event[]>;
private _eventsObserver: Observer<Event[]>;
private pollInterval: number = 5000;
private _dataStore: {
events: Event[];
};
constructor(private http: Http) {
this._dataStore = { events: [] };
this.events$ = new Observable(observer => this._eventsObserver = observer)
.startWith(this._dataStore.events)
.share();
}
pollEvents() {
return Observable.interval(10000)
.switchMap(() => {
return this.http.get('app/resources/data/scheduleevents.json')
.map((responseData) => {
return responseData.json();
});
})
.map((events: Array<any>) => {
let result: Array<Event> = [];
if (events["data"]) {
events["data"].forEach((event) => {
result.push(event);
});
}
return result;
});
}
}
Dove ha fatto si aggiunge quel po 'di codice? –
ma poi ottengo 0 due volte https://plnkr.co/edit/Cl5DQ7znJRDe0VTv0Ux5?p=preview – adamdport
incantevole! molte grazie!! –