nodejs:mysql 无法访问连接查询回调中的全局变量

苏加玛·文卡特桑

下面是我的代码

我从客户端 javascript 发送数据对象到这个函数 data 打印它的值

里面的socket.on

在 socket.on -> connection.query(sql,[], function(err,rows){data prints here})

在 socket.on 内 -> connection.query(sql,[], function(err,rows){data 在此处打印})-> connection.query(sql,[], function(err,rows){data prints undefined})

socket.on('sendmessage', function (data) {
    var data = JSON.parse(data);
    console.log(data);
    if (data.cuserid != '' && users_connected.hasOwnProperty(data.cuserid) && fs.existsSync(users_connected[data.cuserid]['sessionfile'])) {
        sql = "update hired set echat='Y' where eid=? and jobid=? and jid=? and status in ('given','finished')";
        connection.query(sql, [data.cuserid, data.jobid, data.userid], function (err, rows) {/*console.log(this.sql);*/ });
        sql = "insert into chat_messages(fromid,toid,jobid,message,received_date) select ?,?,?,?,NOW() from hired where echat='Y' and jchat='Y' and jobid=? and jid in(?,?) and eid in(?,?) and status in ('given','finished')";
        connection.query(sql, [data.cuserid, data.userid, data.jobid, data.message, data.jobid, data.cuserid, data.userid, data.cuserid, data.userid], function (err, rows) {
            console.log("dataretrieved : ", data); if (!err && users_connected[data.userid] != '') {
                socid = users_connected[data.userid]['socket'];
                sql = "select id as userid,username, userphoto from us_signup where id=?";
                connection.query(sql, [data.userid], function (err, rows) {
                    console.log(data);  //prints undefined                                   
                    if (!err) {
                        var data = {
                            'userphoto': rows[0].userphoto,
                            'username': rows[0].username,
                            'userid': rows[0].userid,
                            'cuserid': data.cuserid,
                            'message': data.message,
                            'jobid': data.jobid
                        }
                        io.to(socid).emit('message', JSON.stringify(data));
                    }
                })
            }
        });
    }

})
罗伯特克莱普

您正在data最深层次创建一个新的范围

if (!err) {
  var data = { ... }
  ...
}

这个变量被提升到包含函数的顶部,所以代码变成了这样的:

var data;          // clobbers the existing `data` variable...
console.log(data); // ...so here it will log `undefined`...                           
if (!err) {
  data = { ... }   // ...because it receives a value here.
  ...
}

解决方案:

  • 不要var在那里使用
  • 开始使用 let

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

无法在NodeJS MySQL中使用全局变量

来自分类Dev

回调中的 Nodejs Mysql 回调

来自分类Dev

Node.js在MySQL查询中更改全局变量

来自分类Dev

nodejs连接mysql错误

来自分类Dev

nodejs连接mysql错误

来自分类Dev

NodeJS MySQL高级查询

来自分类Dev

无法访问Express / NodeJS中的req.session变量

来自分类Dev

无法访问打字稿中的全局变量

来自分类Dev

luabind:无法访问全局变量

来自分类Dev

Nodejs Mysql中的嵌套查询

来自分类Dev

在C函数中将MySQL连接保持在函数的静态变量中(避免全局变量)

来自分类Dev

NodeJS集群全局变量

来自分类Dev

无法访问在标准回调中传递的对象变量

来自分类Dev

无法访问在标准回调中传递的对象变量

来自分类Dev

Mysql-nodejs嵌套查询

来自分类Dev

nodejs mysql查询没有

来自分类Dev

NodeJS-MySQL查询错误

来自分类Dev

NodeJS / MySQL从查询返回结果到变量

来自分类Dev

NodeJS / MySQL从查询返回结果到变量

来自分类Dev

无法访问nodejs中的数组值

来自分类Dev

docker nodejs 容器无法连接 mysql 容器

来自分类Dev

识别NodeJS mysql中的主键

来自分类Dev

Google App引擎Nodejs Puppeteer中的全局变量

来自分类Dev

全局变量在 NodeJS 中不起作用 undefined

来自分类Dev

从XMLHttpRequest的onload回调访问全局变量

来自分类Dev

无法访问更新的全局变量的值

来自分类Dev

Angular 2“ this”无法访问嵌套函数中的全局变量

来自分类Dev

在C / C ++程序中,可以定义某些函数无法访问的全局变量吗?

来自分类Dev

在JavaScript中创建全局变量,控制台无法访问