繁体   English   中英

Node.js 中的异步 Mysql 查询

[英]Async Mysql Query in Node.js

我想从我的 mysql 数据库中获取特定值,然后将其传递给 API。 所以我必须等待查询完成。 我在 stackoverflow 上找到了这个 async/await 示例。 但这对我不起作用。

async function getUTC() {
  try {
    let result = await db.query(`SELECT utcEndSeconds FROM mp_games ORDER BY utcEndSeconds ASC LIMIT 1`)
    return result
  } catch (err) {
    console.log(err)
  }
}

let newUTC = getUTC()
console.log(newUTC)

newUTC.then(data => {
  console.log(data)
})

第一个 console.log(newUTC) 打印 Promise { pending }。 我希望在这里找到我的数据,因为 await 应该已经解决了 promise ???

然后我添加了 .then() 块。 console.log(data) 打印一个大的 object(我猜是 mysql),但在 object 中找不到我的数据。

我在这里想念什么? 提前致谢。

您对异步/等待模式的理解有问题。

newUTC.then(data => {
  console.log(data)
})

上面的代码解析 promise 并返回data object。 但是console.log(newUTC)给你 promise 挂起,因为它没有被等待也没有被 promise 封装来解决。

如果你改变

let newUTC = getUTC()
console.log(newUTC)

let newUTC = getUTC()
console.log(await newUTC)

然后首先等待代码并将结果传递给console.log

编辑:等待仅在异步 function 中有效。 如果您的 function 不是异步的,那么您需要使用 promise 方法。

let newUTC = getUTC()
newUTC.then(data => console.log(data));

我认为使用 mysql.query 回调 function 并在里面运行我的代码的 rest 会更容易。 它不那么漂亮但有效

db.query(`SELECT utcEndSeconds FROM mp_games ORDER BY utcEndSeconds ASC LIMIT 1`, (err, result) => {
  let newUTC = result[0].utcEndSeconds

... rest of my code (api calls etc...)

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM