首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >电子: ipcMain.on和ipcMain.handle可以使用相同的频道名称吗?

电子: ipcMain.on和ipcMain.handle可以使用相同的频道名称吗?
EN

Stack Overflow用户
提问于 2020-11-17 19:14:28
回答 1查看 721关注 0票数 2

我们可以为ipcMain.on方法和ipcMain.handle()注册相同的通道吗?

例如:

代码语言:javascript
复制
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 )吗?

例如:

代码语言:javascript
复制
ipcRenderer.invoke('test', data).then(result => {
    console.log(result);
    return result;
});

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

回答 1

Stack Overflow用户

发布于 2020-12-13 21:31:15

这是你可以轻易测试出来的事情之一。

查看他们的代码 for ipcMain.handle,他们将通道名存储在一个_invokeHandlers映射中,该映射似乎与模块的其余部分隔离(从ipcMain.on)。

实际上,ipcMain扩展了一个EventEmitter,它是一个Node类,它维护自己管理事件的内部结构(这是定义ononce的模块)。

因此,只要使用适当的机制触发ipcMain.on("test", ...)ipcMain.handle("test", ...),就应该能够安全地使用它们:send/sendSync对应于on/onceinvoke对应于handle/handleOnce

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64881837

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档