clearTimeout与let和const一起使用吗?

时间:2017-01-12 20:39:39

标签: javascript reactjs

我似乎无法让它发挥作用。

openContactUsForm(stop: Boolean = false) {
  let openContactForm = setTimeout(() => {
    $('#myButton').click();
  }, 6000);
  if (stop) {
    clearTimeout(openContactForm);
    $('#myButton').click();
  }
}

即使将stop布尔值作为true传递

,超时仍会在6秒后点击

1 个答案:

答案 0 :(得分:1)

听起来你是在调用方法一次,然后再次调用它,并将stop传入为true。在这种情况下,无论您何时调用该方法,都会重新定义openContactForm。如果您在react组件中,可以执行此操作的一种方法是将计时器设置为组件上的属性。

如果您正在进行ES6课程,您最初可以在构造函数

中定义它
constructor() {
  super()
  this.timer = null;
}

openContactUsForm(stop: Boolean = false) {
 if (stop) {
    clearTimeout(this.timer);
    $('#myButton').click();
    return;
  }
  this.timer = setTimeout(() => {
    $('#myButton').click();
  }, 6000);

}

如果您的标签错误且没有使用reactjs,您只需要在顶级范围内定义计时器,这样每次调用该函数时都不会重写,导致计时器ID发生变化而不会停止原来的计时器。