2016-09-30 75 views
0

运行HTTP调用我有叫我的API这样的服务:角2:区间

return this._http 
     .post(apiUrl + 'Controller/Action', params, {withCredentials: true, headers: this.headers}) 
     .timeoutWith(8000, Observable.defer(() => Observable.throw(this._feedbackService.timeout()))) 
     .map((response: Response) => response.json().data); 

我调用该函数从我的组件是这样的:

this._mySub = this._myService.getSomething() 
         .subscribe(
          response => this._listOfSomething = response, 
          error => this._loggerService.log(2, "warn", "Error bla bla") 
         ); 

我如何在一个时间间隔运行HTTP调用?

我尝试这样做:

this._mySub = this._myService.getSomething() 
         .interval(15000) 
         .startWith(0) 
         .subscribe(
          response => this._listOfSomething = response, 
          error => this._loggerService.log(2, "warn", "Error bla bla") 
         ); 

但是,上面写着:

住宅 '区间' 的类型不存在 '可观察<任何>'

我种了它的工作方式如下:

Observable.interval(15000).subscribe(() => { 
    this.refreshList(); 
}); 

refreshList() { 

this._mySub = this._myService.getSomething() 
         .subscribe(
          response => this._listOfSomething = response, 
          error => this._loggerService.log(2, "warn", "Error bla bla") 
         ); 

} 

但是这似乎在几乎随机的时间触发HTTP调用,并且以这种方式设置它时感觉不对。

回答

0

你可以尝试这样的事情:

let intervalId = setInterval(() => { 
    this.updateData(); 
}, 15000); 

updateData(){ 
    this._mySub = this._myService.getSomething() 
          .subscribe(
           response => this._listOfSomething = response, 
           error => this._loggerService.log(2, "warn", "Error bla bla") 
         ); 
} 

良好做法是清除时,没有需要的时间间隔。您应该将您的时间间隔设置为ngOnInit()并在ngOnDestroy()中将其清除。因为如果您将它放入构造函数中,即使您将切换组件(转至网站上的其他子页面),它也会继续更新。

编辑。您可以使用clearInterval(intervalId)清除间隔。

+0

这样做效果更好。谢谢。唯一的“缺点”是我必须在设置间隔之前手动调用'this.updateData()',而不是使用像'startWith(0)'这样的东西。 –