【问题标题】:Node.js trying to use async/await to get data from a mysql select before using the variableNode.js 在使用变量之前尝试使用 async/await 从 mysql 选择中获取数据
【发布时间】:2019-06-11 10:19:58
【问题描述】:

我需要通过 mysql 查询来捕获一些数据,并使用结果来构建并通过 node.js 将结果发送到电子邮件中。 我将代码放在一个函数中,但是对查询的调用似乎仍然是异步的,因为在函数结束之前从未返回结果,并且返回的变量总是空的。

使用 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”包含一些文本以及所需的查询字段,但它总是为空。在日志中,我看到虽然变量已填满,但只有在函数返回之后,用于将电子邮件放在一起的文本在 DB 部分中是空的

【问题讨论】:

  • 你检查过console.log(query('SELECT Link FROM Link_Foto where ID_Utente="' + utente + '"');)吗?是回报承诺吗?

标签: mysql node.js async-await


【解决方案1】:

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 + '"');

【讨论】:

    猜你喜欢
    • 2019-01-29
    • 1970-01-01
    • 2017-04-14
    • 2017-07-19
    • 2017-10-15
    • 1970-01-01
    • 2017-05-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多