In a simple setInterval
setInterval(function() { // Do something every 9 seconds }, 9000);
The first action will happen after 9 seconds (t=9s
). How to force the loop to perform the first action immediately (t=0
)?
I think it is due to the mechanism of setInterval
to have Delay - Action - Delay - Action ...
loop; instead of Action - Delay - Action - Delay ...
loop.
EDIT: My function is indeed a loop as
setInterval(function(){ $('.test').each(function(idx){ var duration = 1000; $(this).delay(duration*idx); Some stuff here }); }, 4000);
Method 1: Calling the function once before executing setInterval: The function can simply be invoked once before using the setInterval function. This will execute the function once immediately and then the setInterval() function can be set with the required callback.
“setinterval for 5 times” Code Answer'svar intervalID = setInterval(alert, 1000); // Will alert every second. // clearInterval(intervalID); // Will clear the timer. setTimeout(alert, 1000); // Will alert once, after a second.
Calling clearInterval() inside setInterval() has no effect But after calling clearInterval(), it will continue to execute.
Answer: Use the clearInterval() Method The setInterval() method returns an interval ID which uniquely identifies the interval. You can pass this interval ID to the global clearInterval() method to cancel or stop setInterval() call.
Keep it simple. You can use a named function instead of an anonymous function; call it and set an interval for it.
function doSomething() { console.log("tick"); } doSomething(); setInterval(doSomething, 9000);
Create a scope if necessary:
(function() { function doSomething() { console.log("tick"); } doSomething(); setInterval(doSomething, 9000); })();
Finally, the following works without creating or affecting x
:
setInterval(function x() { console.log("tick"); return x; }(), 9000);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With