Electron.js ipc.sendSync 冻结

Posted

技术标签:

【中文标题】Electron.js ipc.sendSync 冻结【英文标题】:Electron.js ipc.sendSync Frezees 【发布时间】:2018-12-22 22:37:47 【问题描述】:

您好,我从主进程请求两个结果,但是当我单击按钮时,应用程序一直冻结。甚至 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)

感谢您的帮助。

【问题讨论】:

为了进一步了解您的问题,the node.js event loop 是一本不错的读物。 【参考方案1】:

docs 很清楚这一点:

发送同步消息会阻塞整个渲染器进程,除非你知道自己在做什么,否则永远不要使用它。

由于您没有在 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")
)

【讨论】:

感谢您的帮助

以上是关于Electron.js ipc.sendSync 冻结的主要内容,如果未能解决你的问题,请参考以下文章

Electron.js:需要远程模块不会让脚本工作

Electron + xmpp.js:如何调试 SSL 自签名错误消息?

如何调试写在 electron.js 文件中的脚本

如何在 Electron.js 中保存画布上绘制的图像

使用electron+Js开发夸平台(LinuxWinMac)的桌面应用程序

如何在 electron.js 中修复“跳过 checkForUpdatesAndNotify,因为应用程序未打包”