我想知道Node.js的 Socket.IO 客户端库中是否有用于替换特定事件的侦听器功能的选项。
我有这个简单的功能:
var Service = module.exports = function(address) {
var _socket = require('socket.io-client')(address);
this.connectAccount = function(account, callback) {
_socket.on('account/connected', function (response) {
callback(response.data, response.message);
});
_socket.emit('account/connect', account.getParameters());
};
}
问题是,当我多次调用函数connectAccount()
时,我每次在on()
函数中传递的所有匿名函数也会被调用,并且在它达到限制并且抛出错误之后不久。
所以我的问题是,是否有一种方法如何在每次只调用一次时更换每次监听器?
提前致谢。
答案 0 :(得分:5)
您可以在添加新侦听器之前删除侦听器,也可以检查是否附加了侦听器。
删除侦听器:
int count = 0;
for(int i = 0; i < n; i++) {
for(int j = 1; j < n; j = j * 2) {
count++;
}
}
检查某个事件是否有听众:
_socker.removeListener('account/connected', [function]);
答案 1 :(得分:2)
eventEmitter支持多个事件处理程序。它没有“替换”事件处理程序的机制。因此,您有几个选择:
仅安装事件处理程序一次的代码示例:
var Service = module.exports = function(address) {
var initialized = false;
var _socket = require('socket.io-client')(address);
this.connectAccount = function(account, callback) {
if (!initialized) {
_socket.on('account/connected', function (response) {
callback(response.data, response.message);
});
initialized = true;
}
_socket.emit('account/connect', account.getParameters());
};
}