Javascript 为什么角度服务中的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 '

我需要每隔几分钟从服务器获取更新,所以我在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 './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是为
组件
而不是为
服务