我循环访问目录中的文件并将文件详细信息存储到数组 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);
});
});
如果我将 data.push(...)
移到 fs.stat
之外,数组将返回文件数据。在 fs.stat
中它返回空。我认为这是一个异步问题,因为 for 循环在 fs.stat
运行之前运行并完成。
我想我需要在这里使用 promise 但不确定。
最佳答案
如果你想要或需要异步:
const fs = require("fs");
const path = require("path");
const { promisify } = require("util");
const asyncStat = promisify(fs.stat);
fs.readdir('../src/templates', async function(err, files) {
if (err) {
throw err;
}
const data = await Promise.all(files.map(async function(file) {
try {
const stats = await asyncStat('../src/templates/' + file);
return { Name: file, Path: path.join(query, file), stats };
} catch (e) {
console.log(e);
}
}));
res.json(data);
});
请注意,我使用 map
而不是 forEach
然后等待所有 Promise(async
使函数返回一个 promise)。
我还需要更改 fs.stat
以将 promise 与 util.promisify
结合使用。
关于javascript - 在 Node JS 中将文件循环到数组中时存储 fs.stat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49017779/