嘿,伙计们,我在解决node.js中的异步问题上遇到了一些困难

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

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

问题是,isdone最终变成了真的,但是while却永远存在,为什么?

最佳答案

首先,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);

关于javascript - 在Node.js中处理异步,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56136602/

10-11 14:25