Мне нужно прочитать папку с именем 'curvas'. Многие папки находятся внутри curvas, и я использую readdir для их получения. После получения папок внутри 'curvas' я делаю foreach и использую readdir для вывода списка файлов (файлов внутри папок, которые находятся внутри 'curvas').
Проблема в том, что я могу получить доступ только к переменной внутри внутреннего 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!!
});
});
};
Спасибо!
[EDIT]
Решение: Руководствуясь @ 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)
});
});
};