Javascript: 仅在尚未设置时启动 setTimeout()

Javascript: Start setTimeout() only if it hasn't been set already

我有一个振动功能,我想每 3 秒左右执行一次,直到单击按钮 我尝试这样做的方法是让一个循环执行直到条件为假,当单击按钮时,条件设置为假。我可以在我的 while 循环中使用睡眠,然后调用振动,但我想在单击按钮后立即中断,而不必等待 3 秒左右。

如果设备仍在振动,我正在尝试设置超时,但我不想连续设置超时,我只想一次设置一个超时,这样只有在振动时才设置超时尚未设置

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

听起来 setInterval 是更好的选择。

let interval;

this.vibrate();

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

然后你可以在点击按钮时执行一个函数来清除间隔:

function buttonClicked() {
   clearInterval(interval);
}

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