javascript - Electronjs 应用程序 async/await 不等待函数返回数据

标签 javascript node.js electron

我是 Electron Nodejs 应用程序的新手。我使用 ipcRenderer.on 调用从 html 到 main.js 进行调用。 main.js 中的代码如下,我读取文件夹数组,从每个文件夹中获取文件,并从每个文件中读取内容以进一步处理。现在的问题是main函数没有等待内容读取函数返回数据。

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 的帖子和文档。但我不明白他们是在一起还是替代。请帮忙。

最佳答案

您可以使用回调来正确获取数据。

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);
}

关于javascript - Electronjs 应用程序 async/await 不等待函数返回数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65454633/

相关文章:

javascript - 在 jQuery BootGrid 中重新加载不起作用

electron - 如何确定应用程序是否由 Electron 构建?

javascript - 如何在另一个模块中使用模块函数的输出

javascript - "debug = require(' debug') ('api:server' )"是什么意思

google-chrome - 将自定义点击事件绑定(bind)到 chrome 控制台

node.js - Electron 作为 Web 浏览器的安全影响

javascript - 如何从可拖动元素制作可拖动元素?

javascript - do/while 的技术方法

javascript - 使用 Apache 的 mod_proxy_wstunnel 连接到 PHP,而不使用第 3 方 API

java - 在网络级别上在 AWS 和 localstack 之间切换