Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript:Start setTimeout()仅当它没有';还没定下来_Javascript_Settimeout - Fatal编程技术网

Javascript:Start setTimeout()仅当它没有';还没定下来

Javascript:Start setTimeout()仅当它没有';还没定下来,javascript,settimeout,Javascript,Settimeout,我有一个振动功能,我想每3秒钟左右执行一次,直到点击一个按钮 我试图做到这一点的方法是让一个循环一直执行到一个条件为false,当点击按钮时,该条件被设置为false。我可以在我的while循环中使用sleep,然后调用振动,除了我想在单击按钮后立即中断,而不必等待3秒钟左右 如果设备仍在振动,我会尝试设置超时,但我不想持续设置超时,我只希望一次设置一个超时,因此只有在尚未设置超时时才设置超时 this.vibrate() while(this.state.isVibrating){ if

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

如果设备仍在振动,我会尝试设置超时,但我不想持续设置超时,我只希望一次设置一个超时,因此只有在尚未设置超时时才设置超时

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

听起来
setInterval
是一个更好的选择

let间隔;
这个。振动();
间隔=设置间隔(this.vibrate.bind(this),3000);
然后,您可以在单击按钮时执行一个可以清除间隔的函数:

功能按钮点击(){
间隔时间;
}

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

这可能会有所帮助吗?您可以使用
setInterval()
clearInterval()
。似乎是个更好的选择here@Yousername我想阻止函数的其余部分执行,直到条件为真。clearTimeout()之后有一些代码,在振动停止之前我不想执行。
setTimeout
的参数需要是函数引用,而不是函数调用。但我想阻止函数的其余部分执行,直到条件为真。clearTimeout()之后有一些代码,我不想在振动之前执行stops@Sam你不能那样做。JavaScript是单线程的,因此在函数运行时条件不能更改。@Sam听起来您需要稍微重新构造代码。防止某些代码在
循环时运行是不好的做法