为什么Angular服务中的setInterval只触发一次?

时间:2017-05-11 06:27:36

标签: javascript angular typescript setinterval

我需要每隔几分钟从服务器获取更新,因此我在我的DeliveriesService中使用setInterval。

以下是我int value = 0; String number = edit1.getText().toString(); try{ value = Integer.parseInt(number); }catch(NumberFormatException ex){ Toast.makeText(this,"Please enter a valid number",Toast.LENGTH_SHORT).show(); }

的相关部分
deliveries.service.ts

一旦组件导入服务并访问import { Injectable, OnInit } from '@angular/core'; import { Subject } from 'rxjs/Subject'; import { Http } from '@angular/http'; import { Delivery, Product } from './delivery'; @Injectable() export class DeliveriesService implements OnInit { private fetchUrl = 'https://my.url'; private getInt; public deliveries$ = new Subject<Array<Delivery>>(); constructor(private http: Http) { } ngOnInit() { this.startUpdate(); } startUpdate(): void { console.log('starting delivery fetch'); this.getInt = setInterval(this.fetchDeliveries(), 5 * 60 * 1000); } stopUpdate(): void { clearInterval(this.getInt); } updateNow(): void { this.stopUpdate(); this.startUpdate(); } fetchDeliveries(): void { console.log('updating deliveries'); this.http.get(this.fetchUrl) .map(res => { // do stuff, process data, etc. }).subscribe(); } } ,第一个间隔就会触发。 我得到了服务器数据和&#34;更新交付&#34;在控制台一次,但那就是它。 我甚至把时间间隔缩短到30秒,只是为了确保,并且没有。

我在这里缺少什么? 服务不是&#34;运行&#34;什么时候没有被访问?

(我觉得这是一个PEBKAC问题,我还没有完全理解Angular。)

deliveries$包括:

app.module.ts

环境:

providers: [
  // other services and providers
  DeliveriesService,
  // more providers
]

1 个答案:

答案 0 :(得分:4)

您需要传递要执行的函数引用,而不是传递函数的返回值,并使用.bind()来设置上下文

setInterval(this.fetchDeliveries.bind(this), 5 * 60 * 1000);

OR

setInterval(()=> this.fetchDeliveries(), 5 * 60 * 1000);

如果您需要将其他参数传递给fetchDeliveries

setInterval(this.fetchDeliveries.bind(this), 5 * 60 * 1000, param1, param2);

this.fetchDeliveries(param1, param2){..}