在Node.js中处理异步

时间:2019-05-14 18:38:13

标签: javascript node.js asynchronous npm synchronization

嘿,我在解决Node.js中的异步问题时遇到了一些麻烦

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

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

问题是,isDone最终成为事实,但一会儿永远存在,为什么?

1 个答案:

答案 0 :(得分:3)

首先,setTimeout,小写的o

其次,正如James @的评论所说,这是一个阻塞问题,原因是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);