Electron.js ipc.sendSync 冻结

问题描述 投票:0回答:1

您好,我正在从主进程请求两个结果,但是当我单击按钮时,应用程序一直冻结。甚至开发工具也无法工作。

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)

感谢您的帮助。

javascript html electron ipc
1个回答
9
投票

文档对此非常清楚:

发送同步消息将阻塞整个渲染器进程,直到收到回复。

由于您没有在

fmail
回调中提供返回值,难怪它会阻止您的应用程序。

另外,我猜您想单独注册两个侦听器。您当前拥有的是“每次回调'fmail'时添加侦听器到'fpass'”

你的代码可能应该是这样的(但不能确切地说出)

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")
)

文档还提到了针对这种情况的更方便的替代方案:使用

invoke()

© www.soinside.com 2019 - 2024. All rights reserved.