我试图将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结果,或者是否为此目的使用其他方法。请详细说明。
谢谢。
答案 0 :(得分:0)
Node js函数异步工作,所以我建议将您的查询与promise一起使用。
class Database {
constructor( config ) {
this.connection = mysql.createConnection( config );
}
query( sql, args ) {
return new Promise( ( resolve, reject ) => {
this.connection.query( sql, args, ( err, rows ) => {
if ( err )
return reject( err );
resolve( rows );
} );
} );
}
close() {
return new Promise( ( resolve, reject ) => {
this.connection.end( err => {
if ( err )
return reject( err );
resolve();
} );
} );
}
}
答案 1 :(得分:0)
请尝试替换此代码,
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();
与此
connection.query(sql_query)
.then( results=> {
sql_results = results;
return connection.close();
} );
Danmoreng已经提到了有关Promises
和async/await
的文章。它们将帮助您了解上述代码的工作原理。
答案 2 :(得分:-1)
查询的结果将在回调函数中返回,该函数执行的时间比调用代码的时间晚。在设置sql_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
console.log(sql_results);
});
connection.end();