【问题标题】:Handling Async in Nodejs在 Nodejs 中处理异步
【发布时间】:2019-10-01 20:17:58
【问题描述】:

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

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

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

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

【问题讨论】:

  • setTimeout 函数没有机会执行,因为线程被 while 循环阻塞了。
  • 猜我想念一些计算机体系结构课,谢谢@James

标签: javascript node.js asynchronous npm synchronization


【解决方案1】:

首先是setTimeout,小写o

其次,正如 James@ 评论所说,这是一个阻塞问题,原因是 JS 是单线程的,并且在有空闲执行周期之前不会恢复异步代码(承诺、超时、间隔)。为了解决这个问题,您可以将 sn-p(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);

【讨论】:

    猜你喜欢
    • 2022-01-12
    • 2014-08-05
    • 2017-09-12
    • 1970-01-01
    • 2013-03-19
    • 2011-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多