gpt4 book ai didi

Electron:ipcMain.on 和 ipcMain.handle 可以使用相同的 channel 名称吗?

转载 作者:行者123 更新时间:2023-12-03 12:38:42 25 4
gpt4 key购买 nike

我们可以为 ipcMain.on 方法和 ipcMain.handle() 注册相同的 channel 吗?
例如:

ipcMain.handle('test', async(event,args) => {
let result = await somePromise();
return result;
});

ipcMain.on('test', async(event,args) => {
event.returnValue = await somePromise();
});
请问上面的代码,报错 没有处理程序注册“测试”? 如果 ipcRenderer 按顺序通过调用和 sendSync 调用它?
例如:
ipcRenderer.invoke('test', data).then(result => {
console.log(result);
return result;
});

someFunction(data) {
return ipcRenderer.sendSync('test', data);
}

最佳答案

这是您可以轻松测试的内容之一。
看着他们的code对于 ipcMain.handle ,他们将 channel 名称存储在 _invokeHandlers似乎与模块的其余部分隔离的 map (意思是 ipcMain.on )。
事实上,ipcMain扩展 EventEmitter , 这是一个 Node 类,它维护自己的内部结构来管理事件(这是定义 ononce 的模块)。
所以你应该能够安全地使用这两个 ipcMain.on("test", ...)ipcMain.handle("test", ...)只要您使用适当的机制触发它们:send/sendSync对应于 on/onceinvoke对应于 handle/handleOnce .

关于Electron:ipcMain.on 和 ipcMain.handle 可以使用相同的 channel 名称吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64881837/

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