首页 > 解决方案 > 如何从 socket.io 获取返回值?

问题描述

我正在使用node.jsand socket.io,我想获得一个变量,但它会引发错误。

io.sockets.on('connection', function(socket) {
    test = 1;
})

console.log(test) // ReferenceError: test is not defined

我试过的

io.sockets.on('connection', function(socket) {
    return test = 1;
})

预期结果

io.sockets.on('connection', function(socket) {
    test = 1;
})
console.log(test) // expected reslut test = 1

标签: node.jssocket.io

解决方案


您的代码中有两个问题。

1. Javascript本质上是异步的。因此,控件不会等待您的事件被触发,然后再继续下一行。

它与您的问题有什么关系?

io.sockets.on('connection', function(socket) {
    test = 1;
})

console.log(test)

这里的函数(你分配的地方test=1)只会在connection事件触发时执行。所以javascript引擎会注册你io.sockets.on(...),然后继续执行下一行,即console.log(test) 现在,事件还没有被触发,没有值被分配给test

2.变量test 不可访问console.log(test)

假设您不在strict模式下,当行执行时test会被提升test = 1,之后它会可用,但是console.log(test)到执行时,test=1还没有执行(点#1),所以参考错误。

所以我建议你把你的console.log语句代码放在匿名函数的主体中。

io.sockets.on('connection', function(socket) {
    test = 1;
    console.log(test);
}) 

推荐阅读