Обработка асинхронных в Nodejs - PullRequest
2 голосов
/ 14 мая 2019

Эй, ребята, у меня возникли проблемы с решением асинхронной проблемы в Node.js

let isDone = false;
setTimeOut(() => { isDone = true }, 1000)

let i = 0;
while(!isDone) {
 console.log(i++)
}

Дело в том, что Дон в конце концов становится правдой, но пока держится вечно, почему?

1 Ответ

3 голосов
/ 14 мая 2019

Во-первых, setTimeout, строчные буквы o.

Во-вторых, как сказал James @ comment, это проблема блокировки, вызванная тем, что JS является однопоточным и не будет возобновлять асинхронный код (обещания, тайм-ауты, интервалы) до тех пор, пока у него не будет свободного цикла выполнения. Чтобы обойти это, вы можете обернуть более позднюю часть вашего фрагмента (цикл while) в интервал. Это даст движку JS возможность проверять готовый асинхронный код на каждой итерации while

let isDone = false;
setTimeout(() => {
  isDone = true;
}, 1000);

let i = 0;
let interval = setInterval(() => {
  if (isDone)
    clearInterval(interval);
  else
    console.log(i++);
}, 0);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...