Asyn c Mysql Запрос в Node.js - PullRequest
0 голосов
/ 04 мая 2020

Я хочу получить значение c из моей базы данных mysql, а затем передать его в API. Поэтому я должен дождаться запроса до конца sh. Я нашел этот пример async / await на stackoverflow. Но это не работает для меня.

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 (newUT C) печатает Promise {pending}. Я ожидал найти свои данные здесь, потому что ожидание уже должно разрешить обещание ???

Затем я добавил блок .then (). console.log (data) печатает большой объект (mysql, я полагаю), но мои данные нигде не найдены в объекте.

Что мне здесь не хватает? Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 04 мая 2020

Я думаю, что проще использовать функцию обратного вызова 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...)

}
0 голосов
/ 04 мая 2020

У вас проблемы с пониманием шаблона асинхронного / ожидающего выполнения.

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

Приведенный выше код разрешает обещание и возвращает вам data объект. но console.log(newUTC) дает вам обещание в ожидании, потому что оно не ожидается и не заключено в обещание разрешения.

если вы измените

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

на

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

, то сначала ожидаемый код и результат передаются в console.log.

EDIT: ожидание работает только в функции asyn c. Если ваша функция не является асинхронной c, то вам нужно использовать подход обещания.

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