Electron.js ipc.sendSync 冻结

Electron.js ipc.sendSync Frezees

您好,我正在请求主进程的两个结果,但是当我单击按钮时,应用程序一直冻结。甚至 devtools 都不起作用。

Main.js

ipcMain.on('fmail', (event, arg) => {
  var fmaile = even
  var fmaila = arg  

  ipcMain.on('fpass', (event, arg) => { 
    var fpasse = event
    var fpassa = arg

    console.log(fpassa)
    console.log(fmaila)

    fmaile.returnValue = "info"
    fpasse.returnValue = "info"
  })
})

Javascript

var datamail = ipcRenderer.sendSync('fmail', "fmail");
var datapass = ipcRenderer.sendSync('fpass', "fpass");
console.log(datamail)
console.log(datapass)

感谢您的帮助。

docs 在这一点上非常清楚:

Sending a synchronous message will block the whole renderer process, unless you know what you are doing you should never use it.

由于您没有在 fmail 回调中提供 return 值,难怪它会阻止您的应用程序。

另外,我猜您想分别注册两个侦听器。您目前拥有的是 "add listener to 'fpass' every time 'fmail' is called back"

您的代码可能看起来像这样(但无法准确判断)

ipcMain.on('fmail', (event, arg) => {
  console.log(arg)
  event.returnValue = "info"
})
ipcMain.on('fpass', (event, arg) => {
  console.log(arg)
  event.returnValue = "info"
})
console.log(
  ipcRenderer.sendSync('fmail', "fmail"),
  ipcRenderer.sendSync('fpass', "fpass")
)