[英]setInterval() - but run it only once
如果我多次调用更新函数,则会运行此间隔的多个实例。 如何确定每个idVar仅触发一次?
例如,如果我使用相同的idVar连续运行两次,则我每秒获得两次更新,而更新一次应该只有一个。
如果idVar不同,则应多次运行。 idVar用于Update()。
intervals[idVar] = setInterval(function() {
update();
}, 1000);
intervals[idVar] = setTimeout(function() {
update();
}, 1000);
如果您确实需要使用setInterval而又不想使用setTimeout,则可以在输入函数时将其清除
例如
var interval
interval = setInterval(function(){
clearInterval(interval)
//Your code
});
如果您确实想要为每个唯一的idVar运行一个新的间隔实例,则只需检查一下是否已经有一个为当前idVar运行的间隔实例:
if (!intervals[idVar]) {
intervals[idVar] = setInterval(function() {
update();
}, 1000);
}
setInterval
返回用于标识它的timeoutID 。
要停止setInterval
请将其timoueID传递给clearInterval
。
解释为什么要运行两个间隔
执行此操作时:
intervals[idVar] = setInterval(function() { update(); }, 1000); intervals[idVar] = setInterval(function() { update(); }, 1000);
您正在做的是:
调用您的第一个
setInterval
并将intervals[idVar]
设置为此第一个setInterval's
timeoutID调用第二个
setInterval
并用 新调用的setInterval
的timeoutID 覆盖存储在intervals[idVar]
的值结果 :两个单独的间隔,其中
intervals[idVar]
存储第二个被调用的timeoutID
setTimeout类似于setInterval,实际上使用相同的超时ID池,但仅在指定的延迟后调用一次。
每个idVar设置一个间隔(setTimeout或setInterval)
var idVar = setInterval(function() { update(); }, 1000); // sets idVar to the timeoutID and starts the interval } intervals[idVar] = idVar; // assigns a property 'idVar' on `intervals` // and sets the timeoutID as its value // allows you to call clearInterval(intervals[idVar]);
但是,如果不确切知道您的
update()
方法在做什么,那么很难说出最佳解决方案是什么...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.