如何删除 pty.js 中的 .on() 函数

How to remove .on() function in pty.js

我在节点中使用 pty.js,我去:

if (!global.terminal)
global.terminal = pty.spawn('ssh', [sshuser + sshhost, '-p', sshport, '-o', 'PreferredAuthentications=' + sshauth], {
            name: 'xterm-256color',
            cols: 80,
            rows: 28
        });

 var term1 = global.terminal;

 term1.on('data', function(data) { socket.emit('output1', data); console.log('on data: ' + data); });

现在,我从来没有 term1.end() 因为我不希望终端会话关闭,即使用户关闭浏览器也是如此。所以我保留global.terminal。但是,我注意到每当一个新的套接字连接(即我刷新浏览器)时,.on 方法就会被调用两次、三次,或者无论我刷新多少次。因为它保留了上次连接的 .on。

基本上是一种清除 .on 事件的方法 并开始一个全新的事件。

所以我正在寻找一种在创建新事件之前清除 .on 事件的方法。我不确定这是 javascript/node 还是 pty.js:

但是像这样:

 term1.on('data', null); // <-- doesn't work, clear any existing '.on' functions
 term1.on('data', function(data) { socket.emit('output1', data); console.log('on data: ' + data); });

可以使用方法 removeAllListeners(eventName) 删除 EventEmitter 的侦听器。你的情况看起来像这样:

term1.removeAllListeners('data');