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 + xmpp.js:如何调试 SSL 自签名错误消息?