首页 > 解决方案 > 如何在 io.sockets.on 回调中访问 io 对象?

问题描述

我不想改变我的套接字方法。我希望能够从连接的功能访问io 。

这可能吗?

function sockets (server) {
  const io = require('socket.io')(server);
  io.sockets.on('connection', connected);
}

const connected = (socket) => {
  socket.on('emit_to_all', data => {
    emitToAll(socket, data);

    // above could be achieved with
    // io.emit('emit_to_all', data);
  });
};

我在这里查看了 github ,但所有初步示例都没有使用命名回调。

我在这里找到了基本文档。

最后,在基本文档中,API在这里

标签: javascriptsocketsexpress

解决方案


好吧,您必须将对象作为参数传入,或者将其绑定到上下文。如果你发现闭包语法令人困惑,你也可以只使用 bind。

如果你这样做:

    io.sockets.on('connection', connected.bind(io));

然后你连接的函数this将是 to 对象。或者,如果您更新参数,您可以以类似的方式将其作为参数传递。

    io.sockets.on('connection', connected.bind(null, io));

    const connected = (io, socket) => {
      // Etc

推荐阅读