嘿,我在解决Node.js中的异步问题时遇到了一些麻烦
let isDone = false;
setTimeOut(() => { isDone = true }, 1000)
let i = 0;
while(!isDone) {
console.log(i++)
}
问题是,isDone最终成为事实,但一会儿永远存在,为什么?
答案 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);