首页 > 解决方案 > Sqlite .all() 函数返回一个承诺,但我需要数据库项目...?

问题描述

我是 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 对象,我有点迷茫。

标签: node.jssqlitepromise

解决方案


我会推荐你​​阅读 promises 和 async/await 或 bluebird promises。您将需要使用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 })
   })
});

推荐阅读