我从数据库中提取倒计时数据(只是数字10,15 ..)并使其等于全局。 就在课堂上。
countdown:any;
console.log(this.countdown);//i got data 10 sec
let downloadTimer=setInterval(function counter(countdown){
countdown--; // how to update this.countdown ?
console.log(countdown);
if(countdown <= 0){
clearInterval(downloadTimer);
console.log("time is up!");
}
},1000,this.countdown);
我开始将this.countdown发送到计数器参数但是如何从本地计数器函数更新this.countdown?因为当setinterval迭代时,它总是调用this.countdown,所以计数器首先停留在this.countdown值。
如果我没有参数,我就无法从计数器本地函数访问this.counter。
答案 0 :(得分:2)
您正在尝试传递单个标量值this.countdown
,但确实如此,但您无法以与对象或数组相同的方式更新,并获得更新原始文件的副作用
您可以将引用传递给this
,然后使用它来更新原始文件:
class test {
constructor() {
this.countdown = 20
}
doit() {
console.log(this.countdown); //i got data 10 sec
let downloadTimer = setInterval(function counter(obj) {
obj.countdown--; // how to update this.countdown ?
console.log(obj.countdown);
if (obj.countdown <= 0) {
clearInterval(downloadTimer);
console.log("time is up!");
}
}, 200, this);
}
}
var t = new test
t.doit()
&#13;
您还可以使用箭头函数捕获this
的值,而不是将其传入:
class test {
constructor() {
this.countdown = 20
}
doit() {
console.log(this.countdown); //i got data 10 sec
let downloadTimer = setInterval(() => {
this.countdown--; // how to update this.countdown ?
console.log(this.countdown);
if (this.countdown <= 0) {
clearInterval(downloadTimer);
console.log("time is up!");
}
}, 200);
}
}
var t = new test
t.doit()
&#13;