Функция Sqlite .all () возвращает обещание, но мне нужны элементы базы данных ...? - PullRequest
0 голосов
/ 31 мая 2019

Я новичок в NodeJS и пытаюсь изучить его, создав веб-приложение для корзины покупок.Я храню данные в базе данных SQLite, но не могу получить к ним доступ.Метод .all () возвращает объект Promise, и я не могу понять, как получить элементы в базе данных.

Я следовал этому руководству: https://stackabuse.com/a-sqlite-tutorial-with-node-js/, чтобы построить объект доступа к данным.и две модели: ItemRepository и CartRepository.

Это метод get в моем скрипте объекта доступа к данным:

get(sql, params = []) {
    return new Promise((resolve, reject) => {   
      this.db.get(sql, params, (err, result) => {
        if (err) {
          console.log('Error running sql: ' + sql)
          console.log(err)
          reject(err)
        } else {
          resolve(result)
        }
      }) 
  }

А это мой index.js

router.get('/', function(req, res, next) {
    var dao = new AppDAO('./database.sqlite3');
  var itemRepo = new ItemRepository(dao);
  var cartRepo = new CartRepository(dao);
  items = itemRepo.getAll();
  console.log(items);
  var itemRows = [];
  var rowSize = 3;
  for (var i = 0; i < items.length; i += rowSize){
    itemRows.push(items.slice(i, i+rowSize));
  }
  res.render('shop/index', { title: 'sHOP', items: itemRows })

});

Я немного растерялся относительно того, как получить содержимое таблицы, а не объект Promise.

1 Ответ

1 голос
/ 31 мая 2019

Я буду рекомендовать вам прочитать обещания и обещания async / await или bluebird. вам нужно будет использовать метод then для promise, чтобы получить фактический результат, как показано ниже.

router.get('/', function(req, res, next) {
var dao = new AppDAO('./database.sqlite3');
var itemRepo = new ItemRepository(dao);
var cartRepo = new CartRepository(dao);
itemRepo.getAll().then(( items) =>{ 
   console.log(items);
   var itemRows = [];
   var rowSize = 3;
   for (var i = 0; i < items.length; i += rowSize){
    itemRows.push(items.slice(i, i+rowSize));
     }
    res.render('shop/index', { title: 'sHOP', items: itemRows })
   })
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...