在电子中互连ipcRenderer和ipcMain时出错

Vla*_* G. 0 javascript node.js electron angular-cli angular

我已经在电子中配置了cli角,并且有一个链接可以执行将ipcRenderer和ipcMain相互关联的功能:

的HTML:

<a (click)="check()"> click </a>
Run Code Online (Sandbox Code Playgroud)

零件:

constructor(private _e: ElectronService) { }

check () {
   this._e.ipcRenderer.send ('conn', 'round');
   this._e.ipcRenderer.on ('conn-st', (event, args) => {
      console.log (args);
   });
}
Run Code Online (Sandbox Code Playgroud)

main.js(电子):

ipcMain.on ('conn', function (event, args) {
  event.sender.send ('conn-st', 'trip');
});
Run Code Online (Sandbox Code Playgroud)

问题在于,单击一次时,它会执行一次,但是再次单击时,它会连续执行3、4、5等操作。

并在达到11时抛出此错误:

(node:23006) Error: Possible EventEmitter memory leak detected. 11 conn-st listeners added. Use emitter.setMaxListeners() to increase limit
Run Code Online (Sandbox Code Playgroud)

如何结束ipcRenderer和ipcMain之间的连接?

Ale*_*ner 5

该错误消息仅表示,已创建11个“套接字”(如UNIX中的监听器)的侦听器。每个侦听器都创建一个唯一的ID,该ID在创建侦听器时返回。基于此,可以这样删除一个特定的侦听器:

// Create a listener.
var myListener = function (event, args) {} 
ipcRenderer.on("channel", myListener);

// Delete only this one by its ID:
ipcRenderer.removeListener("channel", myListener);
Run Code Online (Sandbox Code Playgroud)

但是,您也可以删除为套接字创建的所有侦听器,如下所示:

// 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");
Run Code Online (Sandbox Code Playgroud)

电子文档(尤其是此处)也对此进行了介绍。