如何等待 fs.readdir 函数执行?节点JS
How to wait for fs.readdir function execution? Node JS
代码:
function getLocalFiles() {
let files = [];
return new Promise((resolve, reject) => {
fs.readdir('storage', (err, filenames) => {
if (err)
throw err;
filenames.forEach((filename) => {
fs.readFile('storage/' + filename, 'utf-8', (err, data) => {
if (err)
throw err;
const file = {
filename: filename,
content: data
};
files.push(file);
//console.log(files); I checked that array has a files but then it returns empty
});
});
});
resolve(files);
})
}
api.get('/', async (req, res) => {
const files = await getLocalFiles();
res.send('local files:\n' + files);
})
我在“存储”目录中有一些文件,我声明了一个 getLocalFiles() 函数,该函数读取此目录中每个文件的名称和内容并将其推送到“文件”数组。但我得到的不是这个,而是空数组。为什么文件没有写入数组?
一些提示:
- 您正在编写的代码将从使用 fs (
fs/promises
) 的 promises 版本中获益良多。
- 避免混合承诺和回调,只使用承诺(尽可能通过 async/await)。
- 我没有在这里更改它,但是如果你要在 windows 上 运行 这个,
/
分隔符将不会删除它,所以使用 path.join('storage', filename)
而不是
const fs = require('fs/promises');
async function getLocalFiles() {
let files = [];
const dir = await fs.readdir('storage')
for (const filename of dir) {
files.push({
filename,
content: await fs.readFile('storage/' + filename, 'utf-8')
})
}
return files;
}
api.get('/', async (req, res) => {
const files = await getLocalFiles();
res.send('local files:\n' + files);
})
代码:
function getLocalFiles() {
let files = [];
return new Promise((resolve, reject) => {
fs.readdir('storage', (err, filenames) => {
if (err)
throw err;
filenames.forEach((filename) => {
fs.readFile('storage/' + filename, 'utf-8', (err, data) => {
if (err)
throw err;
const file = {
filename: filename,
content: data
};
files.push(file);
//console.log(files); I checked that array has a files but then it returns empty
});
});
});
resolve(files);
})
}
api.get('/', async (req, res) => {
const files = await getLocalFiles();
res.send('local files:\n' + files);
})
我在“存储”目录中有一些文件,我声明了一个 getLocalFiles() 函数,该函数读取此目录中每个文件的名称和内容并将其推送到“文件”数组。但我得到的不是这个,而是空数组。为什么文件没有写入数组?
一些提示:
- 您正在编写的代码将从使用 fs (
fs/promises
) 的 promises 版本中获益良多。 - 避免混合承诺和回调,只使用承诺(尽可能通过 async/await)。
- 我没有在这里更改它,但是如果你要在 windows 上 运行 这个,
/
分隔符将不会删除它,所以使用path.join('storage', filename)
而不是
const fs = require('fs/promises');
async function getLocalFiles() {
let files = [];
const dir = await fs.readdir('storage')
for (const filename of dir) {
files.push({
filename,
content: await fs.readFile('storage/' + filename, 'utf-8')
})
}
return files;
}
api.get('/', async (req, res) => {
const files = await getLocalFiles();
res.send('local files:\n' + files);
})