模块根据需要从数据库加载数据

时间:2019-05-22 14:58:02

标签: javascript node.js

我正在尝试创建一个模块,该模块可以从数据库中一次加载类别,因此我可以使用categoryName查询它,它将返回模型。像这个categoryResolver('sweaters')。我正在使用objection.js

当前我有以下代码

'use strict'

const CategoryModel = require('./models/Category.js')
var categories

async function getCategories () {
  categories = await CategoryModel.query()
}

getCategories()

module.exports = function (categoryName) {    
  return (categories.filter(c => {
    return c.name === category
  }))
}

如何在查询之前确保类别已初始化? 检查类别是否已设置,等到解决方案似乎很糟糕。

1 个答案:

答案 0 :(得分:0)

编辑:添加了演示代码段

您可以让查询函数在运行过滤器之前等待Micka&#xEBl Micka&#xEBl 调用。

getCategories

诺言将解决一次,然后基本上立即得到解决。

外部用户将通过等待以下内容将返回值视为承诺:

// categories is a Promise
const categories = getCategories();

module.exports = async function (categoryName) {    
  return categories.then(cats => cats.filter(c => c.name === categoryName));
}

或之后:

const sweaters = await categoryResolver('sweaters');
// do something with sweaters

在下面的演示中,您会注意到初始解析需要2秒,但随后的调用会立即解析。

categoryResolver('sweaters')
  .then(sweaters => {
    // do something with sweaters
  });