gpt4 book ai didi

javascript - 如何向 ipc 渲染器发送添加回调

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

谷歌搜索说您可以为其添加回调,但文档仅显示“arg1,arg2,arg3”等。

他们也有 sendSync,但我不想在发送我的事件时阻止[我们试图通过浏览器做尽可能多的工作,因为在节点中编写客户端代码似乎有点愚蠢]。

如果创建者有一个 sendSync,那么他们肯定有一个带有回调的版本,或者更好的 promise 。

我希望能够做的一些事情的例子:

//callback
ipcRenderer.send('anaction', '[1, 2, 3]', function() { console.log('done anaction') });
//promise
ipcRenderer.send('anaction', '[1, 2, 3]')
.then(function() { console.log('done anaction') });

//sync exists, but it blocks. I'm looking for a non-blocking function
ipcRenderer.sendSync('anacount', '[1, 2, 3]')
console.log('done anaction');

最佳答案

如果有人在 2020 年仍在寻找这个问题的答案,处理从主线程回复到渲染器的更好方法是不要使用 send完全没有,而是使用 ipcMain.handle ipcRenderer.invoke , 它利用 async/await并返回 promise :
main.js

import { ipcMain } from 'electron';

ipcMain.handle('an-action', async (event, arg) => {
// do stuff
await awaitableProcess();
return "foo";
}
渲染器.js
import { ipcRenderer } from 'electron';

(async () => {
const result = await ipcRenderer.invoke('an-action', [1, 2, 3]);
console.log(result); // prints "foo"
})();
ipcMain.handleipcRenderer.invoke contextBridge 兼容,允许您公开一个 API 以向主线程请求来自渲染器线程的数据,并在它返回后对其进行处理。
main.js
import { ipcMain, BrowserWindow } from 'electron';

ipcMain.handle('an-action', async (event, arg) => {
// do stuff
await awaitableProcess();
return "foo";
}

new BrowserWindow({
...
webPreferences: {
contextIsolation: true,
preload: "preload.js" // MAIN_WINDOW_PRELOAD_WEBPACK_ENTRY if you're using webpack
}
...
});
preload.js
import { ipcRenderer, contextBridge } from 'electron';

// Adds an object 'api' to the global window object:
contextBridge.exposeInMainWorld('api', {
doAction: arg => ipcRenderer.invoke('an-action', arg);
});
渲染器.js
(async () => {
const response = await window.api.doAction([1,2,3]);
console.log(response); // we now have the response from the main thread without exposing
// ipcRenderer, leaving the app less vulnerable to attack
})();

关于javascript - 如何向 ipc 渲染器发送添加回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45148110/

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