起初,我需要对电子和node.js说的很新。
我正在做的是尝试向我的浏览器发送带有一些目录数据的数组,并且此异步(错误:数组为空)。
问题应该是我的函数'scanDirectories(path)'。如果我将其设为非递归状态(scanDirectories(res)->仅返回res),则它对于1级目录而言效果很好,但对于递归目录则没有。
所以我认为我需要像上面的函数那样执行操作,并返回新的诺言?我尝试过,但是无法弄清楚它是如何工作的,或者我的语法应该是。
希望您能帮助我。西蒙
main.js:ipcmain调用函数
ipcMain.on('fileTree', (event, arg) => {
let fileDirectory = helperFile.getDirectories(arg);
fileDirectory.then(function(result) {
event.reply('fileTree', result);
}, function(err) {
console.log(err);
})
})
files.js
const { readdir } = require('fs').promises;
const resolvePath = require('path').resolve;
module.exports = {
getDirectories: async function(path) {
return new Promise(function (resolve, reject) {
try {
resolve(scanDirectories(path));
} catch {
reject('Error');
}
});
}
};
async function scanDirectories(path) {
const dirents = await readdir(path, {withFileTypes: true});
const files = dirents.map((dirent) => {
const res = resolvePath(path, dirent.name);
return dirent.isDirectory() ? scanDirectories(res) : res;
});
return Array.prototype.concat(...files);
}
您可以尝试使用类似的方法来生成承诺数组:
files.js
const { readdir } = require('fs').promises;
const resolvePath = require('path').resolve;
module.exports = {
// This is an async function so don’t need internal promise
getDirectories: async function(path) {
try {
const dirs = await scanDirectories(path);
return dirs;
}
catch {
throw new Error('Error');
}
}
};
async function scanDirectories(path) {
const dirents = await readdir(path, {withFileTypes: true});
// Generate array of promises
const promises = dirents.map(dirent => {
const res = resolvePath(path, dirent.name);
return dirent.isDirectory()
? scanDirectories(res)
: Promise.resolve(res);
});
// Await all promises
const files = await Promise.all(promises);
return Array.prototype.concat(...files);
}