Socket.IO - 如何替换客户端的事件监听器
Socket.IO - How to replace event listener on client
我想知道 Socket.IO 客户端库中是否有用于 Node.js 的选项,用于替换特定事件的侦听器函数。
我有这个简单的功能:
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()
函数中传递的所有匿名函数也会被调用,并且在短时间内达到限制并抛出错误。
所以我的问题是,是否有办法每次替换该侦听器,以便每次只调用一次?
提前致谢。
您可以在附加新侦听器之前删除侦听器,或者检查是否已附加侦听器。
要删除侦听器:
_socker.removeListener('account/connected', [function]);
检查事件是否有监听器:
_socker.hasListeners('account/connected');
一个事件发射器支持多个事件处理器。它没有 "replacing" 事件处理程序的机制。因此,您有几个选择:
- 您可以为事件处理程序是否已设置保留一个标志。
- 您可以在添加之前删除侦听器。如果尚未设置,则将其删除只是一个空话。
只安装一次事件处理器的代码示例:
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());
};
}
我想知道 Socket.IO 客户端库中是否有用于 Node.js 的选项,用于替换特定事件的侦听器函数。
我有这个简单的功能:
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()
函数中传递的所有匿名函数也会被调用,并且在短时间内达到限制并抛出错误。
所以我的问题是,是否有办法每次替换该侦听器,以便每次只调用一次?
提前致谢。
您可以在附加新侦听器之前删除侦听器,或者检查是否已附加侦听器。
要删除侦听器:
_socker.removeListener('account/connected', [function]);
检查事件是否有监听器:
_socker.hasListeners('account/connected');
一个事件发射器支持多个事件处理器。它没有 "replacing" 事件处理程序的机制。因此,您有几个选择:
- 您可以为事件处理程序是否已设置保留一个标志。
- 您可以在添加之前删除侦听器。如果尚未设置,则将其删除只是一个空话。
只安装一次事件处理器的代码示例:
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());
};
}