javascript - Socket.IO - 如何替换客户端上的事件监听器

标签 javascript node.js events socket.io

我想知道 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() 函数中传递的所有匿名函数也会被调用,并且不久之后它达到限制并抛出错误。

所以我的问题是,是否有一种方法可以每次替换该监听器,以便每次只调用一次?

提前致谢。

最佳答案

您可以在附加新监听器之前删除监听器,或者检查是否已附加监听器。

删除监听器:

_socker.removeListener('account/connected', [function]);

检查一个事件是否有监听器:

_socker.hasListeners('account/connected');

关于javascript - Socket.IO - 如何替换客户端上的事件监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32875824/

相关文章:

javascript - 使用 Meteor publish-with-relations 包,其中每个连接不能使用 _id 字段

node.js - 模块 '"typeorm "' has no exported member ' DataSource' 和 'DataSourceOptions'

node.js - 如何在 NextJS 应用程序的 header 中设置字符编码?

events - 在 ExtJS 中,如何在组件中注入(inject) enableKeyEvents = true?

javascript - 为什么 getPreventDefault() 起作用而 defaultPrevented 不起作用?

javascript - 使用 JQuery 将事件处理程序添加到 iframe

javascript - 在 ng-repeat 期间选择时如何使 md-list-item 处于事件状态?

javascript - 获取动态生成的文本区域的值

javascript - 为 javascript/jquery 选择同级和父级 div

javascript - Firebase 的云功能 - 了解哪个用户在 onWrite 中写入了数据