electron `webContents.invoke()` 和 `ipcRenderer.handle()`

wfsdck30  于 4个月前  发布在  Electron
关注(0)|答案(3)|浏览(99)

预检清单

  • 我已阅读了此项目的 Contributing Guidelines
  • 我同意遵循此项目遵循的 Code of Conduct
  • 我在问题跟踪器中搜索了一个与我想提交的功能请求相匹配的问题,但没有成功。

问题描述

无法像使用 ipcRenderer.invoke()ipcMain.handle() 那样通过承诺从主进程请求数据。

建议的解决方案

webContents.invoke()ipcRenderer.handle() 的方法。

考虑过的替代方案

有一些第三方库可以做到这一点。其中之一是 electron-promise-ipc。但是由于 ipcRenderer.invoke() 是本机(承诺从主进程传递到渲染器),因此在相反的方向上实现相同的功能是有意义的。

其他信息

f1tvaqid

f1tvaqid1#

在添加 invoke() 时,这是一个故意的遗漏,因为渲染器进程不能像主进程那样在特定时间内返回响应。为了主进程到渲染器的通信方向添加一个类似于 invoke 的API是有意义的,但一个重要的考虑因素是能够设置一个超时时间,如果在此之后没有收到响应,Promise将会被拒绝。(同样,如果目标帧被导航、包含目标帧的进程被终止,或者由于任何其他原因我们被通知任何事件,这意味着永远不会传递响应,那么Promise也应该被拒绝。)

31moq8wy

31moq8wy2#

是的,这正是我所怀疑的。不过,它仍然具有很好的功能!

k4ymrczo

k4ymrczo3#

我理解这个理由,但我还是不明白为什么它不应该在那里。难道不是开发者来决定是否有响应并相应地处理功能吗?目前在主线程中编写两个IPC事件来做这件事是没有意义的。

相关问题