我如何将查询结果保存在一个变量使用mysql库在NodeJS?



我有这段代码,它打印了正确的结果。我只想"example@gmail.com"在变量中:

[ RowDataPacket { CORREO: 'example@gmail.com' } ]
conexion.query("SELECT CORREO FROM ALUMNOS WHERE NOMBRE='RUBEN'", function (error, results, fields) {
if (error) {
throw error;
}else{
console.log(results)
}
})

但是当我想将它保存在变量中时,它会给我一个错误或未定义:

async function obtainEmail() {
let result = await conexion.query("SELECT CORREO FROM ALUMNOS WHERE NOMBRE='RUBEN'", function (error, results, fields) {
if (error) {
throw error;
}else{
return results;
}
})
}
obtainEmail().then(data => console.log(data));

结果:

undefined

我也测试了:

let test = await obtainEmail();
console.log(test);

结果:

SyntaxError: await is only valid in async functions and the top level bodies of modules

尝试将查询结果("example@gmail.com")保存在变量

如果您将查询函数包装到Promise中,您将能够使用async / await

const results = await new Promise((resolve, reject) => {
conexion.query("SELECT CORREO FROM ALUMNOS WHERE NOMBRE='RUBEN'", function (error, results, fields) {
if (error) {
return reject(error);
}
resolve(results)
})
})

为了消除await is only valid in async functions错误,调用该函数的函数必须具有async例如

(async () => {
const results = await new Promise((resolve, reject) => {
conexion.query(
"SELECT CORREO FROM ALUMNOS WHERE NOMBRE='RUBEN'",
function (error, results, fields) {
if (error) {
return reject(error);
}
resolve(results);
}
);
});
})();

最新更新