如何在函数中使用未定义全局变量?Socket.IO场景报错解析
问题原因
你遇到的socket未定义错误,核心原因是作用域不匹配:
connect.js里的socket是io.on('connection')回调函数的局部变量,仅在该回调的作用域内有效。functions.js里的makesession函数完全访问不到这个局部的socket变量,所以if(socket)判断里的socket本身就是未定义状态,直接触发报错。
修复方案
修改makesession函数,让它接收socket作为参数,调用时把回调里的socket传进去即可:
- 修改
functions.js的makesession函数:
makesession = function(socket, vdata) { // 添加socket参数 if(socket) { socket.userid = vdata.userid; socket.username = vdata.name; } };
- 修改
connect.js里的调用代码:
io.on('connection', (socket) => { memberdata().then(v => { makesession(socket, v); // 传入当前连接的socket对象 }); });
补充说明
你之前的if(socket)判断逻辑本身没问题,但前提是socket变量在当前作用域内可访问。通过参数传递的方式,把局部作用域的socket对象传入makesession函数,就能正确访问并修改它的属性了。
内容的提问来源于stack exchange,提问作者Cain Nuke
相关产品推荐
相关产品推荐

