Javascript:仅在尚未设置setTimeout()的情况下启动

时间:2019-12-24 18:27:26

标签: javascript settimeout

我有一个振动功能,我希望每3秒执行一次,直到单击一个按钮为止 我尝试执行此操作的方法是通过执行一个循环,直到条件为false为止,单击该按钮时,条件将设置为false。我可以在while循环内使用sleep,然后再调用振动,除了单击按钮后我想立即中断即可,而不必等待3秒钟左右。

如果设备仍在振动,我正在尝试设置超时,但是我不想持续设置超时,我一次只希望设置一个超时,因此仅在未设置超时的情况下才设置超时已经

this.vibrate()
while(this.state.isVibrating){
  if (timeout has not been set){
      setTimeout(this.vibrate(), 3000)
  }                
}
clearTimeout()

1 个答案:

答案 0 :(得分:1)

听起来setInterval在这里是更好的选择。

let interval;

this.vibrate();

interval = setInterval(this.vibrate.bind(this), 3000);

然后,当您单击按钮可以清除间隔时,您可以执行一个函数:

function buttonClicked() {
   clearInterval(interval);
}

只需确保interval变量在buttonClicked函数的范围内即可。