【问题标题】:Async Mysql Query in Node.jsNode.js 中的异步 Mysql 查询
【发布时间】:2020-08-18 07:00:41
【问题描述】:

我想从我的 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 应该已经解决了这个承诺???

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

我在这里缺少什么?提前致谢。

【问题讨论】:

    标签: javascript mysql node.js async-await


    【解决方案1】:

    我认为使用 mysql.query 回调函数并在其中运行我的其余代码更容易。它不那么漂亮,但有效

    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...)
    
    }
    

    【讨论】:

      【解决方案2】:

      您对 async/await 模式的理解有问题。

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

      上面的代码解析promise并返回data对象。但是console.log(newUTC) 为您提供了未决的承诺,因为它没有被等待,也没有被承诺解决。

      如果你改变了

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

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

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

      编辑:await 仅适用于异步函数。如果你的函数不是异步的,那么你需要使用 Promise 方法。

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

      【讨论】:

      • 这意味着函数不是异步的。那么你需要使用承诺。检查我的编辑
      • 如果你再次检查我的代码,你会发现我最后使用了那个确切的代码。我的问题是我在数据对象中找不到我的数据(我正在寻找的 utcTimestamp)。
      猜你喜欢
      • 2017-04-08
      • 1970-01-01
      • 2017-06-06
      • 2017-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-31
      • 2019-11-20
      相关资源
      最近更新 更多