gpt4 book ai didi

node.js - 将同步消息从 IpcMain 发送到 IpcRenderer - Electron

转载 作者:IT老高 更新时间:2023-10-28 23:20:51 26 4
gpt4 key购买 nike

electron , 可以通过 ipcRenderer.sendSync('synchronous-message', 'ping') 将同步消息从 IpcRenderer 发送到 IpcMain。

还可以使用 window.webContents.send('ping', 'whooooooooh!')async 消息从 IpcMain 发送到 IpcRenderer

但是有什么方法可以将 sync 消息从 IpcMain 发送到 IpcRenderer?

最佳答案

ipcMain * 没有这样的功能。但是,您可以通过以下步骤异步获得几乎相同的结果:

  • 将仅在同步调用之后运行的代码放在 ipcMain 回调中。
  • 使用 event.sender.send
  • 在渲染器进程中使用结果回复 ipc 消息

使用这种方法的 sum 虚拟示例如下所示:

main.js

const {app, BrowserWindow, ipcMain} = require('electron')
const path = require('path')

app.once('ready', () => {
let win = new BrowserWindow()
// have to run "sync", that is only after result is ready
const doJobWithResult = (res) => {
console.log(res)
}
win.webContents.once('dom-ready', () => {
win.webContents
.send('sum-request', 23, 98, 3, 61)
ipcMain.once('sum-reply', (event, sum) => {
doJobWithResult(sum)
})
})
win.loadURL(path.resolve(__dirname, 'test.html'))
})

renderer.js(引用自 test.html)

const {ipcRenderer} = require('electron')

window.onload = () => {
const add = (a, b) => {
return a + b
}
ipcRenderer.on('sum-request', (event, ...args) => {
event.sender.send('sum-reply', [...args].reduce(add, 0))
})
}

* 我想这是因为从 main 同步调用到渲染器会阻塞主 nodejs 进程,毕竟它也服务于渲染器进程。

关于node.js - 将同步消息从 IpcMain 发送到 IpcRenderer - Electron,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47597982/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com