首页 > 解决方案 > 在 Nodejs 中处理异步

问题描述

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

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

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

问题是,isDone 最终会成为真的,但时间会永远存在,为什么?

标签: javascriptnode.jsasynchronousnpmsynchronization

解决方案


首先setTimeout,小写o

其次,正如 James@ 评论所说,这是一个阻塞问题,原因是 JS 是单线程的,并且在有空闲执行周期之前不会恢复异步代码(承诺、超时、间隔)。为了解决这个问题,您可以将代码段的后半部分(while 循环)包装在一个区间内。这将使 JS 引擎有机会在每次迭代时检查准备好的异步代码

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

let i = 0;
let interval = setInterval(() => {
  if (isDone)
    clearInterval(interval);
  else
    console.log(i++);
}, 0);


推荐阅读