简单的Javascript倒计时如何从setintervals本地函数

时间:2017-11-20 14:44:51

标签: javascript typescript

我从数据库中提取倒计时数据(只是数字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。

1 个答案:

答案 0 :(得分:2)

您正在尝试传递单个标量值this.countdown,但确实如此,但您无法以与对象或数组相同的方式更新,并获得更新原始文件的副作用

您可以将引用传递给this,然后使用它来更新原始文件:

&#13;
&#13;
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;
&#13;
&#13;

您还可以使用箭头函数捕获this的值,而不是将其传入:

&#13;
&#13;
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;
&#13;
&#13;