节点JS MySQL查询函数不返回结果

我在节点JS上运行的.js文件中运行MySQL查询。 我有连接设置确定和查询工作,但是当我尝试返回到原来的调用结果似乎并没有工作。

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; } 

事实上,Node.js中的所有内容都是asynchronous的,并且SQL查询函数也是一样的。 你正在调用conn.query(query, callback) ,这意味着查询被调用,然后一旦在将来的某个时候有一个结果,你的callback函数被调用,结果让你使用。 所以:

 conn.query(query, function(err, rows, fields) { if (err) return console.error("no results were found!"); processResults(rows, fields); }); 

在调用conn.query(...) ,你不会立即得到结果,所以你的代码在同时做“其他事情”,在某个时候,你的callback将被触发,你可以拿起结果在那里处理。