我是 Electron nodejs 应用程序的新手。我使用 ipcRenderer.on 调用从 html 调用 main.js。 main.js 中的代码如下,我读取文件夹数组,从每个文件夹中获取文件并从每个文件中读取内容以进一步处理。现在的问题是main函数没有等待content read函数返回数据。
ipcMain.on('worker', async (event, arg) => {
for (let x = 0; x < folders.length; x++) {
event.reply("dex-worker", dexFolders[x].path);
// Scan folders for files
fs.readdir(folders[x].path, (err, files) => {
// Process files
files.forEach(async (file) => {
event.reply("worker", file.toString()); // THIS WORKS
var fdata = await readData(files[x].path + path.sep + file); // DOES NOT WAIT for RETURN
console.log(fdata); // displays 'undefined'});
});
}
});
async function readData(fi) {
var _fdata = "";
fs.readFile(fi, 'utf8', function (err, data) {
if (err) {
console.log(err);
}
_fdata = data;
return (_fdata);
});
}
我阅读了许多关于 async/await 和 promise 的帖子和文档。但我不明白他们是在一起还是替代。请帮忙。
答案 0 :(得分:1)
您可以使用回调来正确获取数据。
ipcMain.on('worker', async (event, arg) => {
for (let x = 0; x < folders.length; x++) {
event.reply("dex-worker", dexFolders[x].path);
// Scan folders for files
fs.readdir(folders[x].path, (err, files) => {
// Process files
files.forEach(async (file) => {
event.reply("worker", file.toString()); // THIS WORKS
readData(files[x].path + path.sep + file, (err, data) => {
if (err) {
console.log(err);
}
console.log(data);
});
});
})
}
});
function readData(fi, callback) {
fs.readFile(fi, 'utf8', callback);
}