js while(true){} blocks event loop

Viewed 4249
setInterval(function(){console.log("hello")},2000);
while(true){}

"hello" never gets printed.

I think event loop runs in a different thread, but here it seems like 'while loop' is preventing the 'event loop' from execution. Can somebody put some light on this?

2 Answers

Non-blocking while loop:

let done = false;

setTimeout(() => {
  done = true
}, 5);

const eventLoopQueue = () => {
  return new Promise(resolve => 
    setImmediate(() => {
      console.log('event loop');
      resolve();
    })
  );
}

const run = async () => {
  while (!done) {
    console.log('loop');
    await eventLoopQueue();
  }
}

run().then(() => console.log('Done'));
Related