2017-03-28 6 views
0

にipcRendererとipcMainを相互接続するとき、私はそれがipcRendererとipcMainをintercomunicate機能を実行するリンクを有する:エラーIは電子でCLI角度設定されている電子

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'); 
}); 

問題は、一度クリックすると1回だけ行いますが、もう一度クリックすると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

"Restart"は間違った単語ですしかし 'ipcRenderer.on();'を使って(作成された)すべてのリスナーは一意のIDを作成し、 'ipcRenderer.removeListener(channel、listener);'で削除することができます。しかし、[Electron doc](https://electron.atom.io/docs/api/ipc-renderer/)を参照してください。 –

答えて

3

このエラーメッセージには、「UNIX」のような「ソケット」への11のリスナーが作成されたということだけが記載されています。すべてのリスナーは、リスナーの作成時に返される一意の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です。

+0

ありがとうございます、今ではそれがさらにはっきりしています –

+0

もう一度やります。私はあなたを助けてうれしいです。 –

関連する問題