Javascript 使用计时器时,Angular看不到变量值
我需要根据计时器调用angular组件中的后端函数。 我尝试了两种选择: 备选方案N1:Javascript 使用计时器时,Angular看不到变量值,javascript,angular,typescript,angular9,Javascript,Angular,Typescript,Angular9,我需要根据计时器调用angular组件中的后端函数。 我尝试了两种选择: 备选方案N1: _api: Service; constructor(api: Service){ this._api = api; if (this.timeout != null) { clearTimeout(this.timeout); } this.timeout = setTimeout(() => { this.update();
_api: Service;
constructor(api: Service){
this._api = api;
if (this.timeout != null) {
clearTimeout(this.timeout);
}
this.timeout = setTimeout(() => {
this.update();
}, 20000);
}
update()
{
this._api.GetData()….
}
此实现的结果不是每N秒运行一次计时器,它只调用一次update()函数。但通过这种方法,我可以访问this.api的方法/属性
备选方案N2:
_api: Service;
constructor(api: Service){
this._api = api;
setInterval(this.update, 2000);
}
update()
{
this._api.GetData()….
}
结果是:出于某种原因,它无法看到此api的方法/属性。
我检查了如果不使用setInterval是否可以看到它们,似乎问题是由setInterval引起的
请建议如何在Angular中安排某些方法的计时器工作?您使用
setInterval
每n秒运行一次区块是正确的,但您需要使用箭头函数表示法,使用此
关键字引用类成员变量。试试下面的方法
构造函数(api:服务){
这个._api=api;
setInterval(()=>{this.update()},2000);//{this.update()},2000);
}
更新(){
此.api.GetData()文件…。
}
此外,我假定您正在GetData()
函数中发出一些HTTP请求。在这种情况下,最好在触发间隔中的新请求之前取消任何即将发生的请求
dataSubscription: any;
constructor(api: Service) {
setInterval(() => { this.update() }, 2000);
}
update() {
if (this.dataSubscription) {
this.dataSubscription.unsubscribe(); // <-- unsubscribing cancels any impending requests
}
this.dataSubscription = this.api.GetData()….
}
dataSubscription:any;
构造函数(api:服务){
setInterval(()=>{this.update()},2000);
}
更新(){
if(this.dataSubscription){
this.dataSubscription.unsubscribe();//您使用setInterval
每n秒运行一次区块是正确的,但是您需要使用箭头函数表示法,使用this
关键字引用类成员变量。请尝试以下操作
构造函数(api:服务){
这个._api=api;
setInterval(()=>{this.update()},2000);//{this.update()},2000);
}
更新(){
此.api.GetData()文件…。
}
此外,我假设您正在GetData()
函数中发出一些HTTP请求。在这种情况下,最好在触发间隔内的新请求之前取消任何即将发生的请求
dataSubscription: any;
constructor(api: Service) {
setInterval(() => { this.update() }, 2000);
}
update() {
if (this.dataSubscription) {
this.dataSubscription.unsubscribe(); // <-- unsubscribing cancels any impending requests
}
this.dataSubscription = this.api.GetData()….
}
dataSubscription:any;
构造函数(api:服务){
setInterval(()=>{this.update()},2000);
}
更新(){
if(this.dataSubscription){
this.dataSubscription.unsubscribe();//
班级服务{
getData(){
返回rxjs.of(数组(Math.floor(Math.random()*5)).fill(0).map((pr,index)=>({id:index})))
}
}
类组件{
建造师(服务){
服务=服务;
这个。可观察=空;
this.ngOnInit=this.ngOnInit.bind(this);
}
恩戈尼尼特(){
this.observable=rxjs.间隔(3000)
.pipe(rxjs.operators.mergeMap(=>this.service.getData());
}
}
const service=新服务();
常量组件=新组件(服务);
组件。ngOnInit();
component.observable.subscribe(值=>{
console.log(值)
})
班级服务{
getData(){
返回rxjs.of(数组(Math.floor(Math.random()*5)).fill(0).map((pr,index)=>({id:index})))
}
}
类组件{
建造师(服务){
服务=服务;
这个。可观察=空;
this.ngOnInit=this.ngOnInit.bind(this);
}
恩戈尼尼特(){
this.observable=rxjs.间隔(3000)
.pipe(rxjs.operators.mergeMap(=>this.service.getData());
}
}
const service=新服务();
常量组件=新组件(服务);
组件。ngOnInit();
component.observable.subscribe(值=>{
console.log(值)
})