我在类中使用socket.io-client,我这样做:
constructor() {
socket.on("a", this.a.bind(this));
socket.off("a", this.a.bind(this));
}
但是当我构造(on
然后off
同时)时,套接字仍会侦听“a”。
我测试此方法的方法是console.log
on a
方法,输入,当收到“a”时,“控制台记录事件。
我也试过了socket.removeListener
,但它没有用。
也许是因为它是一种类方法?我该如何解决这个问题?
答案 0 :(得分:1)
this.a.bind(this)
每次都会返回一个唯一的函数,因此当您尝试使用.off()
并再次调用.bind()
时,您将获得不同的函数,因此它不会被激活匹配原始文件,因此.off()
找不到要删除的匹配函数。
您必须在某处保存原始绑定功能。您没有足够的代码上下文来了解保存原始.bind()
结果的好地方。
从概念上讲,你想做这样的事情:
// save this somewhere that is per-instance and that both methods can access
// perhaps as an instance variable from the constructor
this.boundA = this.a.bind(this);
ngOnInit() {
socket.on("a", this.boundA);
}
ngOnDestroy() {
socket.off("a", this.boundA);
}
问题演示:
class Foo {
constructor() {
console.log(this.a.bind(this) === this.a.bind(this))
}
a() {
}
}
let f = new Foo();