【发布时间】:2019-08-21 21:47:17
【问题描述】:
我正在尝试将 MySQL 查询结果分配给一个变量,然后在脚本中多次使用它。我想这样做是因为我有 PHP 背景并且我喜欢以这种方式工作。我知道 Node.js 是异步工作的,所以这是我的问题。
在下面的代码中,我想将 MySQL 结果分配给 sql_results 变量,但 connection.query 函数异步工作并且代码以不同的顺序工作。在这种情况下,在我的代码末尾console.log(sql_results) 它返回我undefined。这是正常的,因为当我检查控制台输出时,我清楚地看到 console.log(sql_results) 在 console.log(results) 之前工作。
var mysql = require('mysql');
var connection = mysql.createConnection({
host: "localhost",
user: "root",
password: "1234",
database: "db_progress"
});
var sql_query = "SELECT * FROM db_progress.tblresults res WHERE res.id < 3";
var sql_results; // This is my variable
connection.connect();
connection.query(sql_query, function (error, results, fields) {
if (error) throw error;
console.log(results); // This is mysql results
sql_results = results; // I am sure this works but I can't see
});
connection.end();
console.log(sql_results); // This returns undefined because works before query
我如何将 MySQL 结果分配给一个变量,或者是否有不同的方法用于此目的。请详细说明。
谢谢。
【问题讨论】:
-
正如您已经指出的数据库查询是异步的。因此,您不能以您在此处尝试的方式使用该变量。你想用它做什么,都必须在
connection.query的回调函数之后发生。您可能想了解Promises 和async/await -
是的,你是对的。我已经阅读了有关
Promises和asycn/await的主题。首先,有些人不建议asycn/await他们说这不是Node.js 的工作方式。对于Promises,实际上我无法真正理解 Node.js 中的工作结构
标签: javascript mysql node.js asynchronous