【问题标题】:How to get a return value from socket.io?如何从 socket.io 获取返回值?
【发布时间】:2019-07-31 15:38:17
【问题描述】:

我正在与node.jssocket.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

【问题讨论】:

  • 您好 Lou,欢迎您,请记住,在 Stackoverflow 上,问题应该用英语提出。我翻译了你的帖子,希望它在被接受之前不会被删除。

标签: node.js socket.io


【解决方案1】:

你的代码有两个问题。

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。 console.log(test) 无法访问变量 test

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

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

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

【讨论】:

  • 我需要从块中取出测试变量
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-19
  • 2020-08-02
  • 1970-01-01
  • 1970-01-01
  • 2015-12-03
相关资源
最近更新 更多