Socket事件处理程序访问套接字实例

时间:2016-07-16 17:57:23

标签: javascript node.js sockets

我正在尝试通过将套接字事件处理程序移动到不同的文件来使我的应用程序更加模块化。具体来说,我正在尝试这样做

socket.on('foo',fooHandler)
socket.on('bar',barHandler)

但是,处理程序似乎无法访问套接字实例。这不起作用

fooHandler = (data) => {
  console.log(socket.id)
}

套接字未定义。有没有办法可以在函数中访问套接字实例。我已尝试this.socket.id或在我的处理程序中指定socket参数。他们似乎没有工作

2 个答案:

答案 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)