我需要读一个叫做“曲线”的文件夹。很多文件夹都在“曲线”中,我使用readdir来获取它们。在获得文件夹在‘曲线’内,我正在做一个预测,并使用readdir列出文件(文件夹中的文件,即在‘曲线’)。
问题是,我只能访问内部readdir中的变量(我用console.log进行了测试)。
问:我如何访问这些变量并使用res响应客户端。?
我走了这么远:
exports.getInserted = async function (req, res) {
var teste = await getFilesNames(); // HERE I NEED TO GET THIS FILES NAMES WITH FOLDERS
console.log(teste); // AND THEM PASSING TO THE CLIENT WITH RES.SEND()
};
function getFilesNames() {
return new Promise(function (resolve, reject) {
const chartFolder = './curvas/';
var fileNames = [];
fs.readdir(chartFolder, (err, folders) => {
if (err) {
reject(new Error("Erro ao ler os arquivos."));
}
folders.forEach(folder => {
fs.readdir(chartFolder + folder, (err, files) => {
fileNames = files;
console.log(files) // ----- HERE I CAN SEE ALL FILES AND LIST WITH THEIR FOLDERS.
});
});
// I NEED USE resolve(fileNames) HERE, BUT IS EMPTY!!
});
});
};谢谢!
编辑
解决方案:由@omarwaleed引导的
exports.getInserted = async function (req, res) {
// Envia os arquivos das pastas de curvas para o cliente.
var data = await getFilesNames();
res.status(200).send(data);
};
function getFilesNames() {
return new Promise(function (resolve, reject) {
const chartFolder = './curvas/';
// take care. I've turned it into an async function here
fs.readdir(chartFolder, async (err, folders) => {
if (err) {
reject(new Error("Erro ao ler os arquivos."));
}
let promiseArray = [];
folders.forEach(folder => {
promiseArray.push(
new Promise((resolve, reject) => fs.readdir(chartFolder + folder, (err, files) => {
if (err) {
reject(err);
}
resolve({
folder: folder,
files: files
});
}))
)
});
let results = await Promise.all(promiseArray);
resolve(results)
});
});
};发布于 2019-01-17 10:37:11
使用解析代替注释,// I NEED USE resolve(fileNames) HERE, BUT IS EMPTY!!将导致一个未定义的fs.readdir语句,因为第二个fs.readdir将异步运行,这意味着在代码解析后将读取目录。为了解决这个问题,我建议您将fs.readdir包装成承诺,在这里您可以等待所有文件的读取并解决响应。
下面是您的函数的样子
function getFilesNames() {
return new Promise(function (resolve, reject) {
const chartFolder = './curvas/';
var fileNames = [];
// take care. I've turned it into an async function here
fs.readdir(chartFolder, async (err, folders) => {
if (err) {
reject(new Error("Erro ao ler os arquivos."));
}
let promiseArray = [];
folders.forEach( folder => {
promiseArray.push(
new Promise((resolve, reject)=>fs.readdir(chartFolder + folder, (err, files)=>{
if(err){
reject(err)
}
resolve(files)
}))
)
});
let results = await Promise.all(promiseArray);
resolve(results)
});
});
};https://stackoverflow.com/questions/54233198
复制相似问题