我正在尝试使用Angular2前端轮询数据库中的更新条目。我能够成功地进行轮询,但是在每个轮询请求中,响应将包括DB表中的整个对象列表,从而创建一些非常昂贵的轮询请求。我希望能够跟踪我已经获得的内容,并且只是轮询更新。
我最初的想法只是跟踪对象ID,并且只是继续请求ID大于当前最高ID。问题是我不知道如何使Observable.interval使用我更新的ID值更新请求。
this.incidentsService
.loadIncidentsWithIdGreaterThan(this.highestId)
.subscribe((incidents) => {
this.incidents = incidents;
this.highestId = incidents[this.incidents.length - 1].id;
});
loadIncidentsWithIdGreaterThan(id: number) : Observable<Incident[]> {
return Observable.interval(2000)
.switchMap(() => this.http.get(this.url + "/idGreaterThan/" + id)
.map((data) => data.json() as Incident[]));
}
当我进入chrome控制台时,我可以看到我们仍然获得所有数据库对象,并且轮询请求仍然使用“1”表示ID而不是更新。有没有办法可以解决这种或不同的策略?