【问题标题】:Javascript Function Not Returning Data - Node-MySQLJavascript 函数不返回数据 - Node-MySQL
【发布时间】:2013-09-20 03:35:21
【问题描述】:

目前在服务器上使用 NodeJS、Express、Socket.io 和 node-mysql。当前,服务器上的一项功能根本不返回任何数据存在问题。我已经想办法解决这个问题了。

功能代码;

它应该返回“c”,但不工作。 console.log 实际上显示的是 ID 和用户名。

function LOGIN_USER(a,b) {
    // a    = username
    // b    = password
    var c = [];
    connection.query("SELECT ID FROM GAME_PLAYER WHERE USR = '" + a + "' AND PWD = '" + b + "'", function(err,rows,field) {
        if (err) throw err;

            for (var i in rows) {
                c.ID = rows[i].ID;
                c.USR = a;
            }
            console.log(c.ID + " " + c.USR);
            return c;
    });

}

其他代码。

socket.on('login user', function(data) {
        var c;

        c = LOGIN_USER(data.username,data.password);
        console.log(c.ID,c.USR);
    });

在这个 console.log 之后是我的 nodeJS 服务器崩溃的地方。说它不能显示未定义的等等……等等。 无法为我的生活弄清楚这一点,非常感谢任何帮助! :)

【问题讨论】:

  • 好问题。想知道为什么一些智障人士投了反对票。

标签: javascript node.js function socket.io node-mysql


【解决方案1】:

MySQL 查询是异步的,因此您不能在其中使用返回值。在异步编程中,必须使用回调,因为返回语句会停止执行:

function LOGIN_USER(a, b, callback) {
  // a    = username
  // b    = password
  var c = [];
  connection.query("SELECT ID FROM GAME_PLAYER WHERE USR = '" + a + "' AND PWD = '" + b + "'", function (err, rows, field) {
    if (err) throw err;
    for (var i in rows) {
      c.ID = rows[i].ID;
      c.USR = a;
    }
    console.log(c.ID + " " + c.USR);
    callback(c);
  });
}

然后你会这样使用它:

socket.on('login user', function(data) {
  LOGIN_USER(data.username, data.password, function(c) {
    console.log(c.ID, c.USR);
  });
});

当您在回调函数中使用 return 语句时,它的行为就像您使用了 return;,而这反过来只是停止了函数的执行。这就是回调的工作方式:

您正在向一个函数以及另一个函数传递值:

var func = function() {
  // do something
};

LOGIN_USER(a, b, func);

当用户登录完成后,登录函数将调用传递给它的函数:

function LOGIN_USER(a, b, callback) {
  // do some work
  callback();
};

所以你将func() 传递给LOGIN_USER(),然后LOGIN_USER() 在完成时调用func()

【讨论】:

  • 感谢这个例子,在我到达那里之前很难找到一个清晰/简短的例子
猜你喜欢
  • 2015-07-15
  • 2018-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-08
  • 2021-11-06
  • 2012-03-12
相关资源
最近更新 更多