如果执行时间长于使用setInterval()
的延迟,有没有办法避免延迟和执行时间之间的冲突?
例如:
setInterval(function(){
// some code that takes 300 ms to be executed
// which it's longer than the delay 200 ms
}, 200);
我已经找到了替代方法,即使用setTimeout()
进行递归以确保延迟将在函数执行后立即开始,但我的问题是关于setInterval()
,而不是替换它setTimeout()
答案 0 :(得分:1)
我不确定你关注的是什么。
Javascript总是单线程的,这意味着在执行setInterval调用的函数时,不会执行其他函数,也不会重新运行setInterval!
当然,如果在您的setInterval调用函数中使用延迟调用,则可以使该函数完成并再次执行。 为了防止此类问题,您可以使用简单的信号量,如:
var inProcessing = false ;
setInterval(function(){
// some code that takes 300 ms to be executed
// which it's longer than the delay 200 ms
if (!inProcessing){
inProcessing = true ;
$http.get(...).then(function(){inProcessing = false;...},
function(){inProcessing = false;...});
}
}
}, 200);
答案 1 :(得分:0)
您无法使用setInterval
,仅setTimeout
执行此操作。如果您的问题是无法轻松取消setTimeout
方法,则可以使用以下内容:
var timeout = setTimeout(function runMe(){
// some code that takes 300 ms to be executed
timeout = setTimeout(runMe, 200);
}, 200);
// somewhere else
clearTimeout(timeout);
答案 2 :(得分:-1)
您可以使用嵌套的setTimeout代替setInterval。希望你喜欢 ! https://javascript.info/settimeout-setinterval
答案 3 :(得分:-2)
我假设您只想推迟setInterval
的一个周期,如果以前的代码中的代码没有完成。
var starts = 0;
var ends = 0;
function myFunc () {
starts++;
//doStuff
ends++;
}
setInterval(function () {
if (starts === ends) {
myFunc();
}
}, 200);