node.js - 如何从 socket.io 获取返回值?
问题描述
我正在使用node.js
and 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
解决方案
您的代码中有两个问题。
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);
})
推荐阅读
- python - 在默认值之上添加特定的刻度
- python - 如何使用 MIMEMultipart?
- ar.js - 如何获取图像 AR.JS 像素中的标记位置?
- aws-lambda - 如何在本地运行 lambda 函数时增加 Lambda 函数的请求超时?
- mongodb - 难以理解项目如何与 mongoDB 聚合框架一起工作
- angular - Angular 8 中模态的循环依赖
- oracle - 使用 to_date() 选择时间段
- python - 按多个条件过滤行 - 为什么这不起作用?
- android - 有没有办法在 android studio 中添加更多设备框架以在 logcat 中截屏?
- javascript - 如何递归地从嵌套的对象数组中删除特定对象?