javascript - Javascript 异步性质
问题描述
我最近在修改 node js 及其异步特性,遇到了一些奇怪的事情。这是代码 -
let sum = 0;
for(let i=0;i<10000000000;i++){
sum += i
if(i==99999999){
console.log(sum);
}
}
console.log('abc');
根据非阻塞的定义,它不应该等待for循环结果,应该先打印'abc',然后在计算完成后打印sum的值对吗?但是,这并没有发生,程序正在等待 for 循环完成并打印 sum 的值,然后打印“abc”。谁能解释这背后的原因?这是由于 console.log 的工作方式造成的吗?
解决方案
它对 IO 操作是非阻塞的,IO operations include file read write, network read write, database read write etc.
这是由事件循环控制的。
for 循环不是 IO 操作,但是如果您在 for 循环中进行 IO 操作,您将获得非阻塞的味道。
你可以在这里阅读更多https://nodejs.org/en/docs/guides/blocking-vs-non-blocking/
推荐阅读
- javascript - 无法读取 null 的属性“getElementsByClassName” - 我可以使用“if”语句强制它吗?
- node.js - 在 Node 中有效地共享项目
- android - 更改 RecyclerView 中单个单元格/项目的背景
- ruby-on-rails - 如何从 ruby on rails 模型添加到数据库列数组中?
- javascript - 使用 localeCompare 比较 Date 对象
- linux - 尝试启动新的 2D 项目时,Linux 上的 Unity ECS 错误
- javascript - 每秒更新一次随机数据中的chartjs图表
- assembly - 如何在(发布)Rust 构建中找到我的函数的汇编代码?
- python - win32ui:更改字体并打印多行
- typescript - 如何为必须具有可为空属性值的对象创建打字稿类型?