[英]Error when interconnecting ipcRenderer and ipcMain in electron
I have configured cli angular in electron, and I have a link where it execute a function that intercomunicate ipcRenderer and ipcMain: 我已经在电子中配置了cli角,并且在其中有一个链接可以执行ipcRenderer和ipcMain互通的功能:
html: 的HTML:
<a (click)="check()"> click </a>
component: 零件:
constructor(private _e: ElectronService) { }
check () {
this._e.ipcRenderer.send ('conn', 'round');
this._e.ipcRenderer.on ('conn-st', (event, args) => {
console.log (args);
});
}
main.js (electron): main.js(电子):
ipcMain.on ('conn', function (event, args) {
event.sender.send ('conn-st', 'trip');
});
The problem is that when you click once, you do it once, but when you click again it does 3, then 4, 5 and so on continuously. 问题在于,单击一次时,它会执行一次,但是再次单击时,它会连续执行3、4、5等操作。
And throws this error upon reaching 11: 并在达到11时抛出此错误:
(node:23006) Error: Possible EventEmitter memory leak detected. 11 conn-st listeners added. Use emitter.setMaxListeners() to increase limit
How do I end the connection between ipcRenderer and ipcMain? 如何结束ipcRenderer和ipcMain之间的连接?
That error message only says, that 11 listeners to a "socket" (like the ones in UNIX) were created. 该错误消息仅表示,已创建11个“套接字”的侦听器(如UNIX中的侦听器)。 Every listener creates a unique ID which is returned when creating the listener.
每个侦听器都创建一个唯一的ID,该ID在创建侦听器时返回。 Based on that, removing one particular listener could be done like this:
基于此,可以这样删除一个特定的侦听器:
// Create a listener.
var myListener = function (event, args) {}
ipcRenderer.on("channel", myListener);
// Delete only this one by its ID:
ipcRenderer.removeListener("channel", myListener);
But you can also delete all of the listeners that were created for a socket, like this: 但是,您也可以删除为套接字创建的所有侦听器,如下所示:
// Create a few listeners.
var myListener0 = function (event, args) {};
var myListener1 = function (event, args) {};
var myListener2 = function (event, args) {};
var myListener3 = function (event, args) {};
//
ipcRenderer.on("channel", myListener0);
ipcRenderer.on("channel", myListener1);
ipcRenderer.on("channel", myListener2);
ipcRenderer.on("channel", myListener3);
// Delete all listeners for socket "channel".
ipcRenderer.removeAllListeners("channel");
This is also covered in the Electron documentation, particularly here . 电子文档(尤其是此处 )也对此进行了介绍。
The accepted answer is nolonger correct as per the electron documentation documentation . 根据电子文档文档 ,可接受的答案不再是正确的。 The listener is a function and should be removed as shown below.
侦听器是一个函数,应按如下所示将其删除。
// Create a listener
let listener = (event, args) => {}
ipcRenderer.on("channel", listener );
//Delete the listener
ipcRenderer.removeListener("parse-cm-request", listener);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.