Skip to content Skip to sidebar Skip to footer

Javascript Set Interval Run As Separate Thread?

I want to use a timer as a fallback in case I end up in an infinite loop. It seems that set interval is the right way to do this. However, it's not working for me. From my researc

Solution 1:

Browser javascript runs in a single thread. So if you perform something that takes too long - it will freeze browser.

See John Resig article for further details: http://ejohn.org/blog/how-javascript-timers-work/

After you read that article you'll get that your setInterval callback queued to be run in 1000ms after now but only after the current code is finished. It cannot finish though, because of the infinite loop.


Solution 2:

zerkms has the correct answer. But I would add that web workers are a way to get some multi-threaded-ish behavior from client side javascript.

var worker = new Worker('my_task.js');
worker.onmessage = function(event) {
 console.log("Called back by the worker!\n");
};

The worker runs in a background thread, and you can exchange messages and subscribe to events. It's pretty nifty.


Solution 3:

As has been already said - the callback to setInterval doesn't run until the infinite loop finishes. To do what you are trying to achieve - without using web workers - you have to check the time from the loop itself:

var start = Date.now();
while((Date.now() - start) < 5000){
  ...
}

Post a Comment for "Javascript Set Interval Run As Separate Thread?"