[英]Node.js trying to use async/await to get data from a mysql select before using the variable
我需要通过mysql查询捕获一些数据,并使用结果来构建和发送带有节点的结果的电子邮件消息。 我把代码放在一个函数中,但是对查询的调用似乎仍然是异步的,因为结果在函数结束之前永远不会返回,并且返回的变量是空的。
用async / await尝试了不同的方法,但仍然执行似乎异步在我的下面的代码只是在控制台登录到步骤3,步骤4是mde无论我在函数调用结束时尝试做什么
async function querydb (utente){
console.log("sono in querydb");
var messageHTMLAllegati="";
var risultatoquery;
console.log("step 1");
var connection = mysql.createConnection({
host : process.env.IP_address,
user : process.env.nome_utente,
password : process.env.password,
port : process.env.port,
database : process.env.DB,
});
console.log("step 2");
const query = util.promisify(connection.query).bind(connection);
(async () => {
try {
console.log("step 3");
var result = await query('SELECT Link FROM Link_Foto where ID_Utente="' + utente + '"');
var i = result.length;
console.log("step 4");
var j ;
for (j=0; j < i; j++) {
messageHTMLAllegati +='<a href="' + result[j].Link + '">Immagine ' + (j+1)+ '</a><BR>';
console.log("print the link found in the DB and added to the text to be printed"+result[j].Link);
}
} finally {
connection.end();
}
})()
return messageHTMLAllegati;
}
我希望最终变量“messageHTMLAllegati”包含一些文本以及所需的查询字段,但它始终为空。 在日志中,我看到变量已填满,但只有在返回函数之后,因此用于将电子邮件放在一起的文本在数据库部分中是空的
async / await方法仅在await函数是promise时有效。 像mysql中的'query'这样的函数正在使用回调函数来获取结果。 因此,如果你想将它与async / await方法一起使用,你应该在另一个函数中使用它,并在其回调函数中获得结果,如下所示:
function query_promise(q_string){
return new Promise((resolve, reject)=>{
query(q_string,(err, result)=>{
if(err) return reject(err);
resolve(result);
});
});
}
然后在你的代码中:
var result = await query_promise('SELECT Link FROM Link_Foto where ID_Utente="' + utente + '"');
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.