簡體   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