und*_*ned 2 javascript setinterval
有一个函数设置一个间隔使用setInterval(),但即使在调用后clearInterval(),我可以在控制台中看到else条件仍在运行.如何正确清除该间隔?
function increase(old, step, neu) {
var i = 0;
var delay2;
function countUp() {
if (i < 5) {
old += step;
// console.log("increase")
$("#total-price-value").text(old + " dollors");
$("#total-price-value").digits();
i++;
delay2 = setInterval(countUp, 80);
} else {
clearInterval(delay2);
console.log(delay2);
}
}
countUp();
}?
Run Code Online (Sandbox Code Playgroud)
ick*_*fay 10
看起来你对超时和间隔之间的差异感到有点困惑.超时只发射一次; 间隔火多次.如果你正在使用一个间隔,你可能只想设置一次(你每次都设置它).如果您正在使用超时,您可能希望每次都设置它(就像您正在做的那样).
为了解决问题,你要么想要切换到超时(可能是最简单的;只是搜索/替换),要么只设置一次间隔.
例如,以下是一个人可能会使用setTimeout多达五个来计算:
var count = 0;
function timeoutFired() {
count++;
if(count < 5) {
setTimeout(timeoutFired, 1000);
}
}
setTimeout(timeoutFired, 1000);
Run Code Online (Sandbox Code Playgroud)
使用超时,我们不需要清除阻止计数; 只是不设置超时将阻止它再次运行.
以下是人们可能会使用的方式setInterval:
var count = 0;
function intervalFired() {
count++;
if(count >= 5) {
clearInterval(interval);
}
}
var interval = setInterval(intervalFired, 1000);
Run Code Online (Sandbox Code Playgroud)
如果您希望使用间隔定期运行某些代码来停止,则必须调用clearInterval.请注意,我们只调用setInterval一次,而不是setTimeout每次我们都不希望它继续.