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