Electron - ipcRenderer 在异步模式下不工作 Class

Electron - ipcRenderer not working in Async Class

我有一个带有构造函数和异步函数的 class。 我已经完成 module.exports 以便我可以从我的 GUI.js 文件和我的 GUI.js 文件中调用我的 Class,我要求 class,并且一切正常很好。

但在我的 class 中,我正在尝试这样做 ipcRenderer.send('message', 'Hello');

我收到这个错误:

TypeError: Cannot read property 'send' of undefined

是否可以远程控制我的 GUI.js 中的 ipcRenderer?

谢谢。

我在我的主文件中需要这个模块,在我的渲染器文件中它发送 ipcRenderer.send('startMyClass');

在我的主文件中:ipcMain.on('startMyClass', (event, args) => { const client = new myClass(); client.Start(); })

这是我的 class/index.js 文件,我的主文件中需要它。

const request = require('request-promise');
const cheerio = require('cheerio');
const { ipcRenderer } = require('electron')

class myClass {
  constructor() {
    this._jar = request.jar();
    this._request = request.defaults({ jar: this._jar });
  }

  async Start() {

   await this.Test();


  };

  async Test() {
    ipcRenderer.send('myMessage', 'Hello');
   }

}


module.exports = myClass;

编辑: 如果我不需要它,并且在我的主文件中有整个 class,我可以做 event.sender.send('myMSG', 'hello');

但我想在我的 class 中执行此操作,它与我的主文件不在同一个文件中。

将消息从 Main 发送到 Renderer 应该通过发送到 specific webContents 来完成。这就是 event.sender.send('myMSG', 'hello') 有效而 ipcRenderer.send 无效的原因。后者发送 from Renderer to Main 如文档中所述(而且,无法从 Main 进程访问,因为您的错误告诉您它未定义)。

ipcMaindocs 中所述,您应该访问要发送到的 webContents 并在其上调用 send

所以要更正您的代码,您可以

  • 将对主 window 的引用传递给 myClass 并在其上调用 send

    class myClass {
      constructor(args) {
        // ...
        this.mainWindow = args.win
      }
      // ...
      async Test() {
        this.mainWindow.webContents.send('myMessage', 'Hello');
      }
    }
    
  • send 到真正专注的 window (BrowserWindow.getFocusedWindow()) 如果这符合您的需要

    class myClass {
      // ...
      async Test() {
        BrowserWindow.getFocusedWindow().webContents.send('myMessage', 'Hello');
      }
    }