我需要每隔几分钟从服务器获取更新,因此我在我的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
]
答案 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){..}