首页 > 解决方案 > 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

我看不到任何地方可以存储此客户端的处理程序,或者我如何为函数回调命名。

标签: javascriptnode.js

解决方案


要做的主要事情是在创建函数引用时存储它,如下所示:

   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);
   }
}

推荐阅读