Задать вопрос
IwanQ
@IwanQ
Плохие времена часто дают прекрасные возможности

Не пойму ошибку в async await?

Здравствуйте.
Установил пакет mysql для работы с бд, но так как он не на промисах, решил сделать следующие.

const getDataDB = async q=>{
  return await connection.query(q, (err,result)=>{
    if(err) throw err;
    console.log(1);

    return result;
  });
};


const getData = async ()=>{
  const data = await getDataDB('SELECT * FROM users');
  console.log(2);
  console.log(data);
};

getData();


И проблема в том, что console log с цифрой 1 появляется после console log 2, т.е. getDataDB возвращает данные позже, чем getData их получает.

В консоле не пойму что выводит

<ref *1> Query {
  _events: [Object: null prototype] {
    error: [Function (anonymous)],
    packet: [Function (anonymous)],
    timeout: [Function (anonymous)],
    end: [Function (anonymous)]
  },
  _eventsCount: 4,
  _maxListeners: undefined,
  _callback: [Function (anonymous)],
  _callSite: Error


Подскажите пожалуйста, что я сделал не так?
  • Вопрос задан
  • 200 просмотров
Подписаться 1 Простой Комментировать
Решение пользователя Robur К ответам на вопрос (4)
Robur
@Robur
Знаю больше чем это необходимо
раз он не на промисах, то return await connection.query
сработает сразу после вызова query. await ждет промиса а его там нет. Почитайте подробнее как async/await работает.

вам нужно конвертировать это в промисы, либо через utils.promisify,
либо
const getDataDB = q=>{
  return new Promise(( resolve, reject) => connection.query(q, (err,result)=>{
    if(err) reject(err);
    console.log(1);

    resolve(result);
  }));
};
Ответ написан