Передать в переменную результат запроса knex - PullRequest
0 голосов
/ 05 ноября 2019

Я пытаюсь приписать результат запроса select с Knexjs переменной. Мой код такой:

function getAllCategories() {
let categories;
categories = database.from("categories").select("category").then(function (rows) {
    for (let row of rows) {
        console.log(row)
    }
    });
console.log(categories)

}

Когда я вызываю функцию:. Затем пишите на терминале массив объектов, как это:

{ category: 'Pasticceria' }
{ category: 'Salati' }
...

Вместо, еслия console.log (категории);на терминале выведите это:

    Promise [Object] {
  _bitField: 0,
  _fulfillmentHandler0: undefined,
  _rejectionHandler0: undefined,
  _promise0: undefined,
  _receiver0: undefined
}

Как я могу приписать переменную, чтобы иметь возможность ее циклически повторять? Большое спасибо всем за помощь, я несколько дней бьюсь головой.

Ответы [ 2 ]

2 голосов
/ 05 ноября 2019

getAllCategories возвращает обещание , которое вы видите при вызове функции. Проще всего было бы обернуть любой вызывающий код getAllCategories в асинхронную функцию, а затем дождаться значения getAllCategories. Я предполагаю, что вы хотите, чтобы getAllCategories возвращал категории, поэтому это может выглядеть примерно так:

async function wrapper() { 
  async function getAllCategories() {
    return database.from("categories").select("category")
  };
  const categories = await getAllCategories() 
  // do whatever you want to do with categories
 }

Вы можете прочитать об асинхронном / ожидающем синтаксисе здесь

0 голосов
/ 05 ноября 2019

Как упомянул Адам Тропп, категории теперь возвращают обещание, которое необходимо выполнить. Когда вы вызываете метод .then (), он вызывает в фоновом режиме метод exec (), То же, что если вы используете async / await, когда выuse await возвращает результат, который должен быть брошен в блок then. Это также дает вам преимущество в цепочке в вашем запросе

async function getAllCategories() {
  return database.from("categories").select("category")
};
const categories = await getAllCategories().where('id', '=', 1) 
  // do whatever you want to do with categories

Метод getAllCategories (), который Адам дал обещание, что вы можете связать все, что вы хотите, и он будет выполняться только при вызове .then() или использовал метод ожидания, который я предпочитаю.

...