更改SQL查询中变量的值



我不想问这么简单的问题,但我在任何地方都找不到答案。

我正试图将sql结果推送到results2,如果我在连接查询内部打印出results2值,它会显示数组,但当我试图返回或在外部打印时,它显示为未定义。

代码:

function getUserData(cookie){
const sqlquery = "SELECT * FROM `users` WHERE `cookie` = ?"
const params = [cookie];
let results2 = [];
connection.query(sqlquery, params, function(error, results, fields){
if(error) throw error;
if(results && results.length){
results2.push(results[0]);
}else{
return("invalid");
}
})
console.log(results2)
return(results2);
}

我已经搜索并阅读了所有的文件,但我找不到我搞砸的地方。

欢迎来到回调和异步操作的世界。

如果我打印出results2值在连接查询中,它显示数组,但是当我试图返回或在外部打印它时,它显示为未定义。

这里console.log(results2)首先运行,在回调中,您将为results2赋值。所以,你看不到它。

您可以将wait与查询一起使用:

//const util = require('util');
function getUserData(cookie){
const sqlquery = "SELECT * FROM `users` WHERE `cookie` = ?"
const params = [cookie];
let results2 = [];
try {
// if not able to use await promisfy it using 
// const query  = util.promisify(conn.query).bind(connection);
// const result = await query(sqlquery, params);
const result = await connection.query(sqlquery, params);
results2.push(result);
} catch(e) {
console.log(e);
}

您的问题是JavaScript是同步的(尝试一次做尽可能多的事情(,除非您告诉它不要这样做。它在实际填充之前返回reults2,因为这样做更快。因此,您需要通过在function之前添加async,在connection.query之前添加await,并在调用getUserData之前添加and,使函数作为一个整体异步(如在await getUserData(var1, var2)中(。

异步函数和等待的解释如下:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function

由于异步函数需要嵌套才能工作(awaits需要在异步函数本身中的任何内容(,您可能会开始收到关于函数不是异步开始的错误。

最新更新