Javascript 使用node.js api递归监视目录

Javascript 使用node.js api递归监视目录,javascript,node.js,asynchronous,Javascript,Node.js,Asynchronous,我试图递归地查看一个目录,但遇到了一个名称空间问题 我的代码如下所示: for (i in files) { var file = path.join(process.cwd(), files[i]); fs.lstat(file, function(err, stats) { if (err) { throw err; } else { if (stats.isDirectory()) {

我试图递归地查看一个目录,但遇到了一个名称空间问题

我的代码如下所示:

for (i in files) {
    var file = path.join(process.cwd(), files[i]);
    fs.lstat(file, function(err, stats) {
        if (err) {
            throw err;
        } else {
            if (stats.isDirectory()) {
                // Watch the directory and traverse the child file.
                fs.watch(file);
                recursiveWatch(file);
            }   
        }   
    }); 
}

看来我只是在看最后一个目录统计。我认为问题在于循环在lstat回调完成之前完成。因此,每次调用lstat回调时,file=。我如何解决这个问题?谢谢大家!

> p>您可以考虑使用:(假设ES5和<<代码>文件<代码>是文件名的<代码>数组< /代码>


有用于此目的的包。

问题是,
var x
不是for循环块的本地,您的回调
函数
会创建一个闭包。如果您将
函数{}
替换为
函数(文件){return function{};}(文件)
,则同样有效。
files.forEach(function(file) {
  file = path.join(process.cwd(), file);
  fs.lstat(file, function(err, stats) {
    if (err) {
      throw err;
    } else {
      if (stats.isDirectory()) {
        // Watch the directory and traverse the child file.
        fs.watch(file);
        recursiveWatch(file);
      }
    }
  });
});