jQuery: Wait/Delay 1 second without executing code

JavascriptJqueryDelayWaitSeconds

Javascript Problem Overview


I can't get the .delay method working in jQuery:

$.delay(3000); // not working
$(queue).delay(3000); // not working

I'm using a while loop to wait until an uncontrolled changing value is greater than or equal to another and I can't find any way to hault execution for X seconds.

Javascript Solutions


Solution 1 - Javascript

You can also just delay some operation this way:

setTimeout(function (){
  
  // Something you want delayed.
     	 	
}, 5000); // How long you want the delay to be, measured in milliseconds.

Solution 2 - Javascript

$.delay is used to delay animations in a queue, not halt execution.

Instead of using a while loop, you need to recursively call a method that performs the check every second using setTimeout:

var check = function(){
    if(condition){
        // run when condition is met
    }
    else {
        setTimeout(check, 1000); // check again in a second
    }
}

check();

Solution 3 - Javascript

ES6 setTimeout

setTimeout(() => {
  console.log("we waited 204586560000 ms to run this code, oh boy wowwoowee!");
}, 204586560000);

Edit: 204586560000 ms is the approximate time between the original question and this answer... assuming I calculated correctly.

Solution 4 - Javascript

If you are using ES6 features and you're in an async function, you can effectively halt the code execution for a certain time with this function:

const delay = millis => new Promise((resolve, reject) => {
  setTimeout(_ => resolve(), millis)
});

This is how you use it:

await delay(5000);

It will stall for the requested amount of milliseconds, but only if you're in an async function. Example below:

const myFunction = async function() {
  // first code block ...

  await delay(5000);

  // some more code, executed 5 seconds after the first code block finishes
}

Solution 5 - Javascript

jQuery's delay function is meant to be used with effects and effect queues, see the delay docs and the example therein:

$('#foo').slideUp(300).delay(800).fadeIn(400);

If you want to observe a variable for changes, you could do something like

(function() {
    var observerInterval = setInterval(function() {
        if (/* check for changes here */) {
           clearInterval(observerInterval);
           // do something here
        }
    }, 1000);
})();

Solution 6 - Javascript

JavaScript setTimeout is a very good solution:

function funcx()
   {
   // your code here
   // break out here if needed
   setTimeout(funcx, 3000);
   }

funcx();

The delay function in jQuery is mostly used for delaying animations in a jQuery animation queue.

Solution 7 - Javascript

delay() doesn't halt the flow of code then re-run it. There's no practical way to do that in JavaScript. Everything has to be done with functions which take callbacks such as setTimeout which others have mentioned.

The purpose of jQuery's delay() is to make an animation queue wait before executing. So for example $(element).delay(3000).fadeIn(250); will make the element fade in after 3 seconds.

Solution 8 - Javascript

Javascript is an asynchronous programming language so you can't stop the execution for a of time; the only way you can [pseudo]stop an execution is using setTimeout() that is not a delay but a "delayed function callback".

Solution 9 - Javascript

	function sleep(num) {
		let now = new Date();
		let stop = now.getTime() + num;
		while(true) {
			now = new Date();
			if(now.getTime() > stop) return;
		}
	}

    sleep(1000);   // 1 second 
    alert('here');

It gets the current time in milliseconds, adds num (which is a future time) where you've adding num many milliseconds to the current time.

An infinite while loop starts up checking the current time until the current time is later than the time we specified in the previous paragraph, once that has occurred the function stops running and execution continues to what ever is after this function call.

Solution 10 - Javascript

Only javascript It will work without jQuery

<!DOCTYPE html>
<html>
    <head>
        <script>
            function sleep(miliseconds) {
                var currentTime = new Date().getTime();
                while (currentTime + miliseconds >= new Date().getTime()) {
                }
            }

            function hello() {
                sleep(5000);
                alert('Hello');
            }
            function hi() {
                sleep(10000);
                alert('Hi');
            }
        </script>
    </head>
    <body>
        <a href="#" onclick="hello();">Say me hello after 5 seconds </a>
        <br>
        <a href="#" onclick="hi();">Say me hi after 10 seconds </a>


    </body>
</html>

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionNahydrinView Question on Stackoverflow
Solution 1 - JavascriptMatt SichView Answer on Stackoverflow
Solution 2 - JavascriptJustin NiessnerView Answer on Stackoverflow
Solution 3 - JavascriptthedanottoView Answer on Stackoverflow
Solution 4 - JavascriptAnthony De SmetView Answer on Stackoverflow
Solution 5 - JavascriptJulian D.View Answer on Stackoverflow
Solution 6 - JavascriptJay TomtenView Answer on Stackoverflow
Solution 7 - JavascriptNathan MacInnesView Answer on Stackoverflow
Solution 8 - JavascriptFabio BudaView Answer on Stackoverflow
Solution 9 - JavascriptdonkeyView Answer on Stackoverflow
Solution 10 - JavascriptFaruk OmarView Answer on Stackoverflow