Привет, ребята, у меня возникли проблемы с решением проблемы с асинхронностью в Node.js.
let isDone = false;
setTimeOut(() => { isDone = true }, 1000)
let i = 0;
while(!isDone) {
console.info(i++)
}
Дело в том, что isDone в конце концов становится истинным, а while сохраняется навсегда, почему?
Думаю, я пропустил какой-то урок компьютерной архитектуры, спасибо, @James



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Во-первых, setTimeout, строчная o.
Во-вторых, как сказано в комментарии Джеймса @, это проблема блокировки, вызванная тем фактом, что JS является однопоточным и не будет возобновлять асинхронный код (обещания, тайм-ауты, интервалы), пока у него не будет свободного цикла выполнения. Чтобы обойти это, вы можете обернуть более позднюю часть вашего фрагмента (цикл while) внутри интервала. Это даст движку JS возможность проверять наличие готового асинхронного кода на каждой итерации цикла while.
let isDone = false;
setTimeout(() => {
isDone = true;
}, 1000);
let i = 0;
let interval = setInterval(() => {
if (isDone)
clearInterval(interval);
else
console.info(i++);
}, 0);
У функции setTimeout нет возможности выполниться, потому что поток заблокирован циклом while.