javascript - NodeJS删除绑定函数的事件监听器
问题描述
我知道我面临的问题,但不知道如何解决它。基本上我有一个Room
存储类Clients
。当他们加入房间时,处理程序会附在他们身上。当他们离开时,处理程序被删除。但是,因为我正在使用bind
(如果可能的话,不介意更改它)我无法弄清楚如何调用off
和传递正确的函数引用。
class Room {
atttachClientHandlers(client){
client.on('data', this.handleData.bind(this, client);
}
detachClientHandlers(client){
client.off('data', this.handleData);
}
handleData(client, data){
// do something
}
}
let client = new Client();
let room = new Room();
room.attachClientHanlders(client); // ok
room.detachClientHandlers(client); // never detaches it
我看不到任何地方可以存储此客户端的处理程序,或者我如何为函数回调命名。
解决方案
要做的主要事情是在创建函数引用时存储它,如下所示:
attachClientHandlers(client){
this.boundHandleData = this.handleData.bind(this, client);
client.on('data', this.boundHandleData);
}
然后,如果引用存在,您的 detach 方法可以将此引用传递给 off:
detachClientHandlers(client) {
if (this.boundHandleData) {
client.off('data', this.boundHandleData);
}
}
推荐阅读
- github - Environtment variable via github secrets
- multilingual - How to add href route in blade for multi language?
- r - 多列的逐行计数
- python - ModuleNotFoundError:没有名为“requests_html”的模块
- android - searchview 圆形背景与菜单
- python - Docker 在 Django 项目中找不到通过 pipenv 安装的模块
- node.js - 节点 html-pdf 自动配置失败
- scala - Gatling :在将 JSON 文件用作请求正文之前更新其内容
- scipy - scipy:如何获取非全零行的数量
- prometheus - 普罗米修斯中的分组和除法