gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 09:35:15 30 4
gpt4 key购买 nike

我需要每隔几分钟从服务器获取更新,所以我在我的 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();
}
}

第一个间隔在组件导入服务并访问 deliveries$ 时立即触发。我在控制台中获得了一次服务器数据和“更新交付”,仅此而已。我什至将间隔降低到 30 秒,只是为了确保,不。

我在这里错过了什么?服务不被访问时不“运行”吗?

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

app.module.ts 包括:

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

环境:

@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

最佳答案

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

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

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

如果你需要传递额外的参数给fetchDeliveries

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

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

关于javascript - 为什么 Angular 服务中的 setInterval 只触发一次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43908009/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com