我们可以为ipcMain.on方法和ipcMain.handle()注册相同的通道吗?
例如:
ipcMain.handle('test', async(event,args) => {
let result = await somePromise();
return result;
});
ipcMain.on('test', async(event,args) => {
event.returnValue = await somePromise();
});上面的代码会给错误No处理程序注册“test”吗?(如果ipcRenderer通过调用并按顺序调用sendSync )吗?
例如:
ipcRenderer.invoke('test', data).then(result => {
console.log(result);
return result;
});
someFunction(data) {
return ipcRenderer.sendSync('test', data);
}发布于 2020-12-13 21:31:15
这是你可以轻易测试出来的事情之一。
查看他们的代码 for ipcMain.handle,他们将通道名存储在一个_invokeHandlers映射中,该映射似乎与模块的其余部分隔离(从ipcMain.on)。
实际上,ipcMain扩展了一个EventEmitter,它是一个Node类,它维护自己管理事件的内部结构(这是定义on和once的模块)。
因此,只要使用适当的机制触发ipcMain.on("test", ...)和ipcMain.handle("test", ...),就应该能够安全地使用它们:send/sendSync对应于on/once,invoke对应于handle/handleOnce。
https://stackoverflow.com/questions/64881837
复制相似问题