Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/429.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 获取io.on范围外的套接字信息(';连接';,函数(套接字){});_Javascript_Node.js - Fatal编程技术网

Javascript 获取io.on范围外的套接字信息(';连接';,函数(套接字){});

Javascript 获取io.on范围外的套接字信息(';连接';,函数(套接字){});,javascript,node.js,Javascript,Node.js,请问如何解决这个问题 我的问题是关于插座的,你必须拥有一些知识才能回答 我试图在函数本身之外声明的变量上保存socket.id,但没有成功。。。使用偶数数组,但使用相同的东西 这是我的密码: var express = require('express'); var app = express(); var http = require('http').Server(app); var io = require('socket.io')(http) app.use('/', express.

请问如何解决这个问题

我的问题是关于插座的,你必须拥有一些知识才能回答

我试图在函数本身之外声明的变量上保存
socket.id
,但没有成功。。。使用偶数数组,但使用相同的东西

这是我的密码:

var express = require('express');
var app = express();
var http = require('http').Server(app);

var io = require('socket.io')(http)

app.use('/', express.static('www'));

http.listen(3000, function(){
    console.log('listening on *:3000');
});

var token_user = {};
io.on('connection', function(socket){
    token_user["something"] = socket.handshake['query']['something'];
    token_user["socket_id"] = socket.id;

});
console.log(token_user["socket_id"]); // Undefined
我收到一条消息,它是:
未定义


是否有任何解决方案或其他方式可以获取
socket.id
,以便在其他功能中使用它?

它看起来像是
控制台。在
令牌用户上设置字段之前,正在执行日志。当该事件发生时,将执行传递到
io.on
的方法。同步执行
io.on
之后的行

尝试将
console.log
移动到传递给
io.on()的函数中。


看起来console.log是在设置字段之前执行的。@Anthony我需要在范围外使用
socket.id
,而不仅仅是在
io.on('connection',function(socket){}内使用你的用例是什么?@JonasW。我需要
socket.id
将其存储在redis上,以便向特定用户发送消息。我想你不明白为什么这个问题被标记为与你的其他评论重复。主要的是js是异步的。这意味着代码中的
console.log(…
io.on(“连接”)之前执行,…
您仅在建立连接后设置socket_id的值。因此,您会遇到此错误。您的变量将在此
io的范围之外进行访问。在…
上,但它仅在连接后定义。您可以使用它。我还将编辑下面的答案以使您更清楚。您没有收到我的问题,先生,我不需要o获取
SOCKET\u ID
超出范围,超出
io.on('connection',function(SOCKET){})
在其他地方使用它。该字段只有在设置后才可用。设置该字段后,您可以调用其他方法来处理附加逻辑。请举例说明如何将
socket.id
从外部获取以便在其他地方使用它,请再次阅读我的问题,它没有那么基本:)。再次感谢您的努力。@BenMarson我已经用一个将token_user对象传递给另一个方法的示例更新了我的答案。在我的情况下,这是不可能的,因为我需要在函数之外使用它,以便与
REDIS CLIENT
一起使用它,因为REDIS在
io.on中包含时有一些问题('connection',function(socket){});
,那么我只需要从该函数中提取
socket.id
,并在其他地方自由使用它。
function anotherMethod(user) {
    console.log(token_user["socket_id"]); // will be "x"
}

var token_user = {};
io.on('connection', function(socket){
    token_user["socket_id"] = "x"
    anotherMethod(token_user);
});