Node JS MySQL 查询函数没有返回结果

3

我在Node JS中运行一个包含MySQL查询的.js文件。我已经设置好连接并且查询可以正常工作,但是当我尝试将结果返回给原始调用时,似乎不起作用。

function sqlQuery(query){
 console.log("Running query");
 var conn = connection();
 var result = false;
 conn.query(query, function(err, rows, fields) {
     conn.end();
     if (!err){ result = rows; } else { result = err; }
 });
 return result;
}

var loginResult = sqlQuery("SELECT * FROM `players`");
console.log(loginResult);

如果我使用以下代码,它会在查询内将结果写入控制台,但不是最终的“loginResult”。我没有收到任何错误消息,所以我的问题是 - 我获取返回的结果的方法有误吗?

if (!err){ result = rows; console.log(rows); } else { result = err; }

1个回答

7

在Node.js中,几乎所有的操作都是异步的,包括SQL查询函数。当你调用 conn.query(query, callback) 时,实际上是在调用查询并且等待结果,在将来某个时刻,一旦有了结果,你的回调函数就会被调用,并将查询结果传递给你供你处理。因此:

conn.query(query, function runThisEventually(err, rows, fields) {
    if (err) {
      console.error("One or more errors occurred!");
      console.error(err);
      return;
    }
    processResults(rows, fields);
});

在调用 conn.query(...) 后,您不会立即获得结果,因此您的代码可以在此期间执行“其他操作”,并且在某个时刻,将触发回调函数,您可以在那里继续处理结果。


我理解了,因此本质上它“似乎”是这样的:如果我将console.log(result)放在函数本身中,它就可以访问结果,因为只有在查询完成后才调用日志事件。我的初始变量loginResult在查询仍在运行时被记录。谢谢! - SystemX17

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接