首页 > 解决方案 > 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 的工作方式造成的吗?

标签: javascriptnode.jsasynchronous

解决方案


它对 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/


推荐阅读