Javascript 为什么角度服务中的setInterval只触发一次?
我需要每隔几分钟从服务器获取更新,所以我在DeliveriesService中使用setInterval 这是我的Javascript 为什么角度服务中的setInterval只触发一次?,javascript,angular,typescript,setinterval,Javascript,Angular,Typescript,Setinterval,我需要每隔几分钟从服务器获取更新,所以我在DeliveriesService中使用setInterval 这是我的deliveries.service.ts的相关部分 import { Injectable, OnInit } from '@angular/core'; import { Subject } from 'rxjs/Subject'; import { Http } from '@angular/http'; import { Delivery, Product } from '
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();
}
}
环境:
@angular/cli: 1.0.1
node: 7.8.0
os: darwin x64
@angular/cli: 1.0.1
@angular/common: 4.1.1
@angular/compiler: 4.1.1
@angular/compiler-cli: 4.1.1
@angular/core: 4.1.1
@angular/forms: 4.1.1
@angular/http: 4.1.1
@angular/platform-browser: 4.1.1
@angular/platform-browser-dynamic: 4.1.1
@angular/router: 4.1.1
您需要传递要执行的函数引用,而不是传递函数的返回值并用于设置上下文
setInterval(this.fetchDeliveries.bind(this), 5 * 60 * 1000);
或
如果需要将附加参数传递给fetchDeliveries
setInterval(this.fetchDeliveries.bind(this), 5 * 60 * 1000, param1, param2);
this.fetchDeliveries(param1, param2){..}
您需要传递要执行的函数引用,而不是传递函数的返回值并用于设置上下文
setInterval(this.fetchDeliveries.bind(this), 5 * 60 * 1000);
或
如果需要将附加参数传递给fetchDeliveries
setInterval(this.fetchDeliveries.bind(this), 5 * 60 * 1000, param1, param2);
this.fetchDeliveries(param1, param2){..}
它很管用,谢谢!附带问题:从ngOnInit调用startUpdate不起作用,但从组件调用它起作用。有什么想法吗?@Jason ngOnInit是为组件
而不是为服务而调用的,谢谢!附带问题:从ngOnInit调用startUpdate不起作用,但从组件调用它起作用。有什么想法吗?@Jason ngOnInit是为组件
而不是为服务