reactiva que programacion ejemplo rxjs rxjs5

rxjs - programacion - Cómo hacer que un observable devuelva datos inmediatamente y cada 5 segundos a partir de entonces



que es un observable angular (4)

Quiero crear un observable que devuelva datos de un webapi. Me gustaría que devuelva los datos de inmediato, y sondear la API cada 10 segundos. El siguiente código muestra que estoy usando el método ''intervalo''. Pero esto retrasa el primer conjunto de datos por 10 segundos. ¿Cómo puedo obtener el primer flujo de datos sin demora inicial?

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; }); } }


Lo tengo:

.interval(5000) .startWith(0);


Para angualr2 a continuación está el código que he escrito en mi aplicación y está funcionando como se esperaba:

En servicio --

import { Observable } from ''rxjs/Observable''; import ''rxjs/Rx''; getList(): Observable<IVM> { return Observable.interval(5000).startWith(0) .switchMap(() => this._http.get(this._vmURL ) .map((response: Response) => <IVM>response.json().data) .do(data => console.log(''All: '' + JSON.stringify(data))) .catch(this.handleError) ); }

En componente -

private getInstanceDetails(): void { this._vmDataService.getList() .subscribe(vmList => { //Do whatever you want with the vmList here :) }, error => this.errorMessage = <any>error); }

Gracias, amablemente dime tus pensamientos.



let timer = TimerObservable.create(0, 5000); this.sub = timer.subscribe(t => { this.yourMethod() });

Para cancelar la suscripción, ejecute this.sub.unsubscribe()