如何让函数等到变量'rows'包含mysql查询的结果?
Posted
技术标签:
【中文标题】如何让函数等到变量\'rows\'包含mysql查询的结果?【英文标题】:how do I make a function wait until the variable 'rows' contains the result of a mysql query?如何让函数等到变量'rows'包含mysql查询的结果? 【发布时间】:2021-09-07 06:57:17 【问题描述】:client.mysqllocal 函数应该返回行。
我当前的代码:https://pastebin.com/hgt2DwSY
const mysql = require('mysql2');
let pool = mysql.createPool(
connectionLimit : 10,
host : 'localhost',
user : 'user',
password : 'passwd',
database : 'database',
waitForConnections: true,
queueLimit: 0
);
client.mysqllocal = async function localmysql(mySQL_db, mySQL_query)
let rows;
pool.getConnection(async function(err, conn)
if (err)
console.log(err);
conn.changeUser(database : mySQL_db, function(err)
if (err)
console.log(err);
);
conn.query(mySQL_query), function (error, results, fields)
rows = results
conn.release()
)
return rows;
let func = client.mysqllocal('database','SELECT * FROM `guild_config` WHERE `guild_id` = "guildid"');
console.log(func);
附:这是一个代码 sn-p,我在上面定义了一个客户端 :)。
【问题讨论】:
【参考方案1】:在这种情况下,我可能会承诺您的查询功能
const mysql = require('mysql2');
let pool = mysql.createPool(
connectionLimit : 10,
host : 'localhost',
user : 'user',
password : 'passwd',
database : 'database',
waitForConnections: true,
queueLimit: 0
);
client.mysqllocal = function localmysql(mySQL_db, mySQL_query)
return new Promise((resolve, reject) =>
let rows;
pool.getConnection(async function(err, conn)
if (err)
reject(err);
conn.changeUser(database : mySQL_db, function(err)
if (err)
reject(err);
);
conn.query(mySQL_query), function (error, results, fields)
rows = results
conn.release()
)
resolve(rows);
);
client.mysqllocal('database','SELECT * FROM `guild_config` WHERE `guild_id` = "guildid"').then(func => console.log(func));
【讨论】:
别忘了await
调用client.mysqllocal() ;)
@ScottyJamison 我做了这样的事情,但是控制台没有返回任何错误或结果,它是空的。代码:pastebin.com/g0CmYGKb
在conn.query(mySQL_query), function (error, results, fields)
行,我看到你只是忽略了那个错误变量。如果该错误有值,请尝试对该错误执行拒绝(),并查看是否会导致显示任何有用的错误消息。例如if (error) reject(error)
对不起,我在转换它时错过了那个错误:/【参考方案2】:
const mysql = require('mysql2');
let pool = mysql.createPool(
connectionLimit : 10,
host : 'localhost',
user : 'user',
password : 'passwd',
database : 'database'
);
client.getLocal = (db, query, callback) =>
pool.getConnection((err, con) =>
if(err) reject(err);
con.changeUser(
database: db
, (err) => if(err) reject(err) );
con.query(query, (error, result, fields) =>
return callback(result);
)
)
client.getLocal('dbname', 'query', (result) =>
console.log(result)
)
我在这里所做的是指定一个函数inside一个函数,这样我就可以使用查询给我的数据,并且也不需要异步! Promise 更受欢迎,但我认为我的回调更灵活一点,初学者在使用 Promise 时容易混淆,就像我一样!我会说像我上面的问题那样使用承诺。
【讨论】:
以上是关于如何让函数等到变量'rows'包含mysql查询的结果?的主要内容,如果未能解决你的问题,请参考以下文章