簡體   English   中英

在電子中互連ipcRenderer和ipcMain時出錯

[英]Error when interconnecting ipcRenderer and ipcMain in electron

我已經在電子中配置了cli角,並且在其中有一個鏈接可以執行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之間的連接?

該錯誤消息僅表示,已創建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);

但是,您也可以刪除為套接字創建的所有偵聽器,如下所示:

// 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");

電子文檔(尤其是此處 )也對此進行了介紹。

根據電子文檔文檔 ,可接受的答案不再是正確的。 偵聽器是一個函數,應按如下所示將其刪除。

// 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM