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 函数的范围内。
我有一个振动功能,我想每 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 函数的范围内。