Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Synchronous delay in code execution

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!

like image 530
kavita Avatar asked Aug 03 '11 05:08

kavita


People also ask

Is setTimeout synchronous or asynchronous?

setTimeout is asynchronous: setTimeout is asynchronous, so the last line will not wait for setTimeout.

How do I make setTimeout synchronous with promise?

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();

What can we use instead of setTimeout?

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.


1 Answers

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...

like image 139
ThinkBonobo Avatar answered Sep 18 '22 06:09

ThinkBonobo