There is a function which sets an interval using setInterval()
, but even after calling clearInterval()
, I can see in the console that the else
condition is still running. How can I clear that interval properly?
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();
}
Apparently, you have mistaken
setInterval
forsetTimeout
.setInterval
runs the enclosed function everyn
milliseconds whilesetTimeout
executes only once aftern
milliseconds.I suppose you wanted to "tick until 5" so here's a sample:
It looks like you're a little confused about the difference between timeouts and intervals. Timeouts fire only once; intervals fire many times. If you're using an interval, you probably only want to set it once (you're setting it every time). If you're using a timeout, you probably want to set it every time (like you're doing).
In order to fix the problem, you'll either want to switch to timeouts (probably the easiest; just a search/replace) or only set the interval once.
For example, here is how one might use
setTimeout
to count up to five:Using timeouts, we don't need to clear to stop it from counting; simply not setting a timeout will prevent it from running again.
Here is how one might use
setInterval
:If you want some code running periodically using intervals to stop, you must call
clearInterval
. Note that we only callsetInterval
once, versussetTimeout
every time we didn't want it to continue.