我想创建一个从webapi返回数据的observable.我希望它立即返回数据,并每隔10秒轮询一次API.下面的代码显示我正在使用'interval'方法.但这会将第一组数据延迟10秒.如何在没有初始延迟的情况下获得第一次数据刷新?
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;
});
}
}
Run Code Online (Sandbox Code Playgroud)
Ale*_*rff 21
使用计时器.我认为这timer
是你需要的(参见RxJS标签):http://reactivex.io/documentation/operators/timer.html#collapseRxJS
可以像:
Observable.timer(0, 5000).flatMap(() => apiCall())
Run Code Online (Sandbox Code Playgroud)
其中0
- 在发出第一个值之前延迟,5000
- 在每个5s之后发出值