2017-03-28 45 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

再次,不客氣。很高興我幫你。 –