2017-03-28 17 views
0

互连ipcRenderer和ipcMain当我已经配置在电子CLI角,我必须在那里执行该intercomunicate ipcRenderer和ipcMain的功能的链接:错误在电子

HTML:

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

组分:

constructor(private _e: ElectronService) { } 

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

main.js(电子):

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

问题是,当你点击一次,你做了一次,但当你再次点击它连续做3,然后4,5等等。

,并引发在到达11这个错误:

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

如何终止ipcRenderer和ipcMain之间的联系?

+0

实际上没有“连接”,就像UNIX套接字一样,Electron会向所有侦听器发出一个信号,然后触发所定义的函数。该错误消息似乎只是说有11个侦听器已创建,它们都听同一个“套接字”。 –

+0

如何重新启动听众? –

+0

“重新启动”可能是错误的词,因为这意味着他们会在此后继续收听。但是每个使用'ipcRenderer.on()创建的监听器()都会创建一个唯一的id,并且可以通过ipcRenderer.removeListener(channel,listener);'来移除。但请参阅[Electron doc](https://electron.atom.io/docs/api/ipc-renderer/)。 –

回答

3

该错误信息仅表示11个侦听器“套接字”(如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"); 

这也是涵盖在Electron文档中,特别是here

+0

非常感谢,现在它更清晰 –

+0

再次,不客气。很高兴我帮你。 –