Задать вопрос
@hollanditkzn

Как мне сделать массив полученные значение из mysql?

Сделал запрос в бд
let user = ctx.state.user[0];
        let sql = 'SELECT id_theme FROM access WHERE id_user = ?';
        let themes = db.query(sql, [user.id], async (err, result) => {
            if(err) console.error(err);
            console.log(result);
            await result;
        });

У меня на выходе я получаю такие данные
[ RowDataPacket { id_theme: 1 },
  RowDataPacket { id_theme: 2 },
  RowDataPacket { id_theme: 3 },
  RowDataPacket { id_theme: 2 },
  RowDataPacket { id_theme: 3 } ]

Только в pug я не могу его загнать
each theme in themes
                     p=theme

Потому что это объект, а как мне сделать его массивом?
Cannot convert object to primitive value

Пробовал еще
так
await JSON.stringify(result);
но тоже не помогло
  • Вопрос задан
  • 638 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
@Abcdefgk
Если вам непременно хочется писать слова async и await, и непременно хочется получить результат запроса в переменную themes, то нужно напейсать примерно так:
asyncFoo();
async function asyncFoo() {
  var themes = await new Promise( resolve => {
    var sql = 'SELECT id_theme FROM access WHERE id_user = ?';
    db.query(sql, [user.id], (err, result) => {
      if(err) console.error(err);
      resolve(result);
    });
  }).then( result => {
    return result;
  };
  console.log(themes);
  // тут его в pug и передавать
}

Стоит ли так заморачиваться ради модных async/await? - Ну, кому-то нравится.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@RidgeA
Ну, вообще-то в callback возвращается массив
spoiler
если не учитывать что массив в js это частный случай объекта

А как там pug с этим работает не знаю.

Есть подозрение, что эта проблема из-за неправильнй работы с async/await - зачем оно вообще там?

let themes = db.query(sql, [user.id], async (err, result) => {
            if(err) console.error(err);
            console.log(result);
            await result;
        });
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы