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

时间:2017-03-28 15:33:06

标签: javascript node.js angular electron angular-cli

我已经在电子中配置了cli angular,我有一个链接,它执行一个交互ipcRenderer和ipcMain的函数:

HTML:

if(cmbBox1 != null && cmbBox1.IsLoaded) //<--
{
    string cmb1TypeString = cmbBox1.SelectedItem.ToString();
}

组件:

<a (click)="check()"> click </a>

main.js(电子):

constructor(private _e: ElectronService) { }

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

问题在于,当您单击一次时,您只需执行一次,但当您再次单击时,它会执行3次,然后是4次,5次,依此类推。

到达11时抛出此错误:

ipcMain.on ('conn', function (event, args) {
  event.sender.send ('conn-st', 'trip');
});

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

2 个答案:

答案 0 :(得分:4)

该错误消息只表示,11个听众来自&#34; socket&#34; (就像UNIX中的那些)是创建的。每个侦听器都会创建一个在创建侦听器时返回的唯一ID。基于此,删除一个特定的侦听器可以这样做:

// Create a listener.
var myListener = ipcRenderer.on("channel", function (event, args) {});
// Delete only this one by its ID:
ipcRenderer.removeListener("channel", myListener);

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

// Create a few listeners.
var myListener0 = ipcRenderer.on("channel", function (event, args) {});
var myListener1 = ipcRenderer.on("channel", function (event, args) {});
var myListener2 = ipcRenderer.on("channel", function (event, args) {});
var myListener3 = ipcRenderer.on("channel", function (event, args) {});

// Delete all listeners for socket "channel".
ipcRenderer.removeAllListeners("channel");

电子文档中也对此进行了介绍,尤其是here

答案 1 :(得分:1)

根据电子文档documentation,已接受的答案不再正确。侦听器是一个函数,应按如下所示将其删除。

// Create a listener
let listener = (event, args) => {}
ipcRenderer.on("channel", listener );

//Delete the listener
ipcRenderer.removeListener("parse-cm-request", listener);