javascript - 在 Nodejs 中处理异步
问题描述
嘿伙计们,我在解决 Node.js 中的异步问题时遇到了一些麻烦
let isDone = false;
setTimeOut(() => { isDone = true }, 1000)
let i = 0;
while(!isDone) {
console.log(i++)
}
问题是,isDone 最终会成为真的,但时间会永远存在,为什么?
解决方案
首先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);
推荐阅读
- r - 返回在 R 中的函数中创建的 data.frames 列表
- android - 如何将 Recyclerview 添加到 Scrollview?
- sql - tSQLt 测试失败,出现“找不到存储过程 'tSQLt.NewTestClass'”错误
- python - 将一行分成多行,但使用 python 重复名称
- php - 在 Laravel 5.4 中发送邮件
- angular - NullInjectorError:商店没有提供者
- python - TypeError: chunkIt() 接受 2 个位置参数,但给出了 3 个
- android - 将 JSON 日期格式从 yyyy-mm-dd 转换为 mm-dd-yyyy android
- material-ui - 为什么和Select一起使用的iconComponent在输入后一行显示?
- ios - “无法初始化‘OrderIntent’。请确保您的意图定义文件有效”在创建自定义意图的瞬间时出错