我正在尝试通过将套接字事件处理程序移动到不同的文件来使我的应用程序更加模块化。具体来说,我正在尝试这样做
socket.on('foo',fooHandler)
socket.on('bar',barHandler)
但是,处理程序似乎无法访问套接字实例。这不起作用
fooHandler = (data) => {
console.log(socket.id)
}
套接字未定义。有没有办法可以在函数中访问套接字实例。我已尝试this.socket.id
或在我的处理程序中指定socket
参数。他们似乎没有工作
答案 0 :(得分:0)
问题是因为我使用的是es6。如果我使用es5
,现在可以使用const skill_suggestions = function(data,res){}
答案 1 :(得分:0)
使用bind
函数
socket.on('foo', fooHandler.bind(socket))
socket.on('bar', barHandler.bind(socket))
fooHandler = (data) {
// NOTE: You CAN'T use arrow function: fooHandler = (data) => ... here
// because it will ignore your `bind'
console.log(this.id) // `this' is socket
}
您可以优化:
socket.on2 = function (arg, func) {
socket.on(arg, func.bind(socket))
}
// Then:
socket.on2('foo', fooHandler)