我是电子的新手,正试图找出处理共享对象的最佳方法。
本质上,我想在Main进程中初始化某个东西,然后在多个渲染器进程中使用它,如下所示:
// main.js
const node = rosnodejs.initNode(); // returns a promise
// renderer1.js
node.then((nh) => {
nh.subscribe("topic1");
})
// renderer2.js
node.then((nh) => {
nh.subscribe("topic2");
})
我可以使用remote
共享node
,但是nh.subscribe
在我的渲染器中变成了一个匿名函数并且失败了。
// main.js
global.node = rosnodejs.initNode(); // returns a promise
global.node.then((nh) => {
nh.subscribe("topic1"); // WORKS PERFECTLY!
})
// renderer1.js
const remote = require('electron').remote;
const node = remote.getGlobal('node');
node.then((nh) => {
nh.subscribe("topic2"); // FAILS MISERABLY.
})
故障消息为Error: Could not call remote function 'subscribe'. Check that the function signature is correct. Underlying error: type.datatype is not a function
。
有没有合适的方法来处理这个问题?我应该使用ipcMain
/ipcRenderer
来代替吗?
1条答案
按热度按时间x3naxklr1#
如果有人碰巧碰到这个(相当古老的)问题,你可以这么做。Remote已经过时了,而且被认为是不安全的,所以你应该使用IPC消息,只需等待一个监听来自呈现器的响应的承诺。所以在主进程中它可以是一个看起来像这样的函数。