获取套接字信息超出范围io.on('connection',function(socket){});

时间:2018-07-16 20:31:36

标签: 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.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

我收到一条消息,它是:UNDEFINED

请问有其他解决方案或其他方法可以将socket.id运用于其他功能吗?

1 个答案:

答案 0 :(得分:0)

console.log上设置字段之前,似乎token_user正在执行。当事件发生时,将执行传递给io.on的方法。 io.on之后的行是同步执行的。

尝试将console.log移至您传递给io.on()的函数中

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);
});