嘿,伙计们,我在解决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/