避免 setInterval() 在间隔开始时执行

Posted

技术标签:

【中文标题】避免 setInterval() 在间隔开始时执行【英文标题】:Avoid setInterval() executing at start of interval 【发布时间】:2017-09-19 09:28:19 【问题描述】:

我注意到 setInterval() 函数实际上在间隔开始时运行(如,接受值),然后在间隔结束时等待并返回结果。 如果值在中间间隔发生变化,它仍然会像开始时那样执行。这会在我的滑块中导致不需要的行为。 有没有办法强制 setInterval() 在间隔的最后做这两个?最好不要使用 jQuery。

编辑:当我将代码转换为在此处发布时,问题自行解决了。原来这与我的问题无关。对不起,下次我一定会发布代码。谢谢你的回答! :) 希望他们将来能帮助别人,因为无论如何我都找不到这样的问题。

【问题讨论】:

我想我明白你的意思,但你应该显示一些代码以便我们帮助你。 到目前为止你尝试过什么? :) 【参考方案1】:

是的。递归使用 setTimeout,这通常是更好的主意。

function doSomething() 
  setTimeout(function () 
    console.log('something')
    doSomething()
  , 2000)


console.log('start')
doSomething()

【讨论】:

【参考方案2】:

您应该发布一些代码。我不完全确定这是否是你的问题,但如果你看看这个:

setInterval(() => 
  var message = 'ok';
  console.log(message);
, 1000);

message = 'not ok';

在 setInterval 中定义的 'message' 变量的作用域是传递给 setInterval 的函数。因此,当我尝试在该范围之外更改变量时,它将不起作用。我实际上不小心在窗口对象上创建了一个新变量。

但是,如果我这样做:

var message = 'ok';

setInterval(() => 
  console.log(message);
, 1000);

message = 'not ok';

“message”变量已成功更改,setInterval 将调用该更改的变量。

【讨论】:

【参考方案3】:

您可以在window 对象上绑定您需要的变量。

window.myVariable = 'Important String';

setInterval(function() 
  doSomethingWith(window.myVariable);
, 2000);

// Variable is changed
window.myVariable = 'Less Important String';

【讨论】:

以上是关于避免 setInterval() 在间隔开始时执行的主要内容,如果未能解决你的问题,请参考以下文章

setInterval 和 setTimeout 用法

setIntervalsetTimeoutrequestAnimationFrame

在if语句中添加window.location时,setInterval会冻结

定时刷新之setTimeout(只一次)和setInterval(间隔相同时间)的使用

在运行时更改 SetInterval 的间隔

javascript之调度:setTimeout 和 setInterval