在Node JS中将文件循环访问到数组时存储fs.stat

dcp*_*450 5 javascript fs node.js

我正在遍历目录中的文件并将文件详细信息存储到数组中data。如果我不尝试运行fs.stat以获取诸如文件创建/编辑日期之类的内容,则以下代码将填充数组:

fs.readdir('../src/templates', function (err, files) {
     if (err) {
        throw err;
      }
      var data = [];
      files
      .forEach(function (file) {
        try {
          fs.stat('../src/templates/'+file,(error,stats) => {
            data.push({ Name : file,Path : path.join(query, file)  });
          });
        } catch(e) {
          console.log(e);
        }

      });

      res.json(data);
  });
});
Run Code Online (Sandbox Code Playgroud)

如果我将数组移到data.push(...)外面,fs.stat则返回文件数据。在fs.stat它里面返回空。我认为这是一个异步问题,因为for循环正在运行并在fs.stat运行前完成。

我想我需要在这里使用诺言,但不能确定。

Buc*_*ket 3

您对异步调用中的问题的看法是正确的。您可以使用 Promise,也可以使用fs.statSync(...),它返回一个fs.Stats对象并同步操作。

files.forEach(function (file) {
    try {
        var fileStats = fs.statSync('../src/templates/' + file);
        data.push({ 
            Name : file,
            Path : path.join(query, file)  
        });
    } catch(e) {
        console.log(e);
    }
});
Run Code Online (Sandbox Code Playgroud)