I have a code which needs to be executed after some delay say 5000 ms.Currently I am using setTimeout but it is asynchronous and i want the execution to wait for its return. I have tried using the following:
function pauseComp(ms) { var curr = new Date().getTime(); ms += curr; while (curr < ms) { curr = new Date().getTime(); } }
But the code i want to delay is drawing some objects using raphaeljs and the display is not at all smooth. I am trying to use doTimeout plugin. I need to have a delay only once as the delay and code to be delayed are both in a loop. I have no requirement for a id so I am not using it. For example:
for(i; i<5; i++){ $.doTimeout(5000,function(){ alert('hi'); return false;}, true);}
This waits for 5 sec befor giving first Hi and then successive loop iterations show alert immediately after the first. What I want it to do is wait 5 sec give alert again wait and then give alert and so on.
Any hints/ suggestions are appreciated!
setTimeout is asynchronous: setTimeout is asynchronous, so the last line will not wait for setTimeout.
To use setTimeout synchronously in JavaScript, we wrap setTimeout in a promise. const sleep = (ms) => { return new Promise((resolve) => setTimeout(resolve, ms)); }; const demo = async () => { console. log("this should be the first one"); await sleep(5000); console. log("this should be the second one"); }; demo();
The setInterval method has the same syntax as setTimeout : let timerId = setInterval(func|code, [delay], [arg1], [arg2], ...) All arguments have the same meaning. But unlike setTimeout it runs the function not only once, but regularly after the given interval of time.
Variation on the accepted answer which is just as good as this one.
Also, I agree with the caveats of preferring setTimeout
and asynchronous function calling but sometimes e.g., when building tests, you just need a synchronous wait command...
function wait(ms) { var start = Date.now(), now = start; while (now - start < ms) { now = Date.now(); } }
if you want it in seconds, divide start ms by 1000 on the while check...
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