node.js - nodejs fs.exists (fs.access) 在 for 循环中发生了奇怪的事情

标签 node.js for-loop fs

我的代码:

for(var i=0; i<2; i++)
{
    console.log("idx: " + i);

    fs.access('/etc/passwd', fs.constants.R_OK | fs.constants.W_OK, (err) => {
      console.log(err ? 'no access!'+i : 'can read/write'+i);
    });

    fs.exists('/etc/passwd', (exists) => {
      console.log(exists ? 'it\'s there'+i : 'no passwd!'+i);
    });
}

结果:
idx: 0
idx: 1
没有权限!2
它在那里2
没有权限!2
它在那里2

为什么我=2?
我该如何解决?

最佳答案

你的问题的关键是异步。 fs的两个方法都是异步的,后面会执行,执行的时候i的值为2,因为循环结束了。

解决它最简单的方法是通过 let 改变循环变量的声明

for(let i=0; i<2; i++)

它将 i 的范围限制为一次迭代

关于node.js - nodejs fs.exists (fs.access) 在 for 循环中发生了奇怪的事情,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47649054/

相关文章:

node.js - 使用 pm2 重启服务器时启动 Node JS 应用程序

java - for 循环产生一系列不同的数字

javascript - 算法:如何打印字母的大形状

javascript - Node.js : get content of uploaded file for creating read stream

sql - 如何将 NodeJS 变量输入到 SQL 查询中

css - 样式 css 文件未应用于我的网站,因为我猜是因为新的 Windows 更新

node.js - 更改 Node.js 中的文件所有者

javascript - NodeJS fs.open 在现有文件上失败(不是路径问题)

node.js - 使用 Passport.js 部分保护 API 端点

ruby - 为什么这个 Ruby for 循环会失败?