socket.io 匿名回调:无法调用 class 函数
socket.io anonymous callback: can't call class functions
所以,我有以下代码:
class Server {
dataHandler(d) {
console.log(d);
}
init() {
io.on('connection', function(socket) {
socket.on('data', this.dataHandler(d); //<-- TypeError: this.dataHandler is not a function
});
}
}
我想处理data socket的数据,但是如何跳出匿名函数环境访问this.dataHandler()?即使当我调用 dataHandler() 或 instance.dataHandler() (一个存储服务器的对象)时,它也找不到该函数。
谁能给我解释一下?
发生这种情况是因为 this
.
的使用不正确
您应该使用箭头函数来保留 this
上下文:
class Server {
dataHandler(d) {
console.log(d);
}
init() {
io.on('connection', (socket) => {
socket.on('data', this.dataHandler(d));
});
}
}
所以,我有以下代码:
class Server {
dataHandler(d) {
console.log(d);
}
init() {
io.on('connection', function(socket) {
socket.on('data', this.dataHandler(d); //<-- TypeError: this.dataHandler is not a function
});
}
}
我想处理data socket的数据,但是如何跳出匿名函数环境访问this.dataHandler()?即使当我调用 dataHandler() 或 instance.dataHandler() (一个存储服务器的对象)时,它也找不到该函数。
谁能给我解释一下?
发生这种情况是因为 this
.
您应该使用箭头函数来保留 this
上下文:
class Server {
dataHandler(d) {
console.log(d);
}
init() {
io.on('connection', (socket) => {
socket.on('data', this.dataHandler(d));
});
}
}