Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

183
Views
Why does nodejs stop execution of while true loop inside async function

I'd like to understand better under what conditions nodejs stops a running process. My guess was that it stops the process when both the stack and the event loop are empty. But the following program only prints hello once, whereas I was expecting it to loop forever, printing hello every second.

(async () => {
  while (true) {
    await new Promise(resolve => setTimeout(() => console.log("hello"), 1000))
  }
})();

How does the while (true) loop interact with the event loop?

about 4 years ago · Juan Pablo Isaza
3 answers
Answer question

0

You need to call your resolve() method ,such that loop can proceed further,like below

(async() => {
  while (true) {
    const data = await new Promise(resolve => setTimeout(() => resolve("hello"), 1000))
    console.log(data)
  }
})();

about 4 years ago · Juan Pablo Isaza Report

0

You haven't resolved your promise.

Node can tell that there are no more event sources that might make something interesting happen (no more timers are scheduled) so it exits, even though there is an unresolved promise.

Compare this version, which will print hello forever, because the promise is resolved when the timeout completes and a new timeout is scheduled, thus ensuring that there is always something in the event queue, giving Node.js a reason to carry on running your program.

(async () => {
  while (true) {
    await new Promise(resolve => setTimeout(() => {
        console.log("hello");
        resolve();
    }, 1000))
  }
})();

If resolve is not called, then the promise is not resolved, and the await never completes and no new timeout is ever scheduled. The event queue empties and node decides that to go on doing nothing would be futile, so it exits.

about 4 years ago · Juan Pablo Isaza Report

0

You haven't mistaken how NodeJS works. Your code just has a bug: resolve never gets called.

If you change it to the following, "hello" prints forever at 1 second intervals:

(async () => {
  while (true) {
    await new Promise(resolve => setTimeout(() => {
      console.log("hello")
      resolve();
    }, 1000))
  }
})();

The reason your code would still end is because, in NodeJS, the resolve function falls out of scope, indicating to the V8 JS engine that the Promise can never resolve. Therefore it ends the async () => {...}, which in turn quits since it's the last function still running.

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!