如何将 knex 查询存储在变量中?

Posted

技术标签:

【中文标题】如何将 knex 查询存储在变量中?【英文标题】:How can I store a knex query in a variable? 【发布时间】:2015-12-12 16:47:39 【问题描述】:

有没有办法可以在 knex 查询中存储变量?现在我可以通过执行以下操作来控制台记录查询结果:

knex.select().table('users').then(function(result) 
    result.forEach(function(value) 
        console.log(value);
    );
);

但我想将查询结果存储在一个变量中 - 如下所示:

var query = knex.select().table('users')

所以我可以将它传递到模板上,对其进行操作等等......

我尝试过的一件事是创建一个空数组并将每个值推入数组,但由于某种原因数组返回空:

var dataArr = [];
knex.select().table('users').then(function(result) 
    result.forEach(function(value) 
        dataArr.push(value)
    );
);
console.log(dataArr.length) // returns 0

【问题讨论】:

这是因为您正在进行异步调用。更多信息在这里:***.com/questions/14220321/… knex 返回一个promise,因此您需要使用async/await 或解析promise 以将查询结果存储在一个变量中。例如var query = await knex.select().table('users') 【参考方案1】:

正如@ShanShan 提到的,您的knex 查询是异步运行的,因此您对console.log 的调用在查询结果返回之前执行。

您需要在将结果传递给then 后处理/使用结果:

return knex('users') // select * from "users"
  .then(function (users) 
    return processUsers(users)
  )
  .then(function (processed) 
    // do something with processed users
  )

【讨论】:

【参考方案2】:

尝试将控制台放在最后一个右括号内,您将能够在控制台中打印数组的长度。

【讨论】:

以上是关于如何将 knex 查询存储在变量中?的主要内容,如果未能解决你的问题,请参考以下文章

如何将从“选择”查询中获得的值存储到 ASP.net 中的会话变量中

如何将简单的 SQL 查询存储到用户定义的变量中并在 MySQL 中执行?

如何将查询存储到变量中

LINQ to SQL 将查询结果存储在变量中

Python-Sqlalchemy-Postgres:如何将子查询结果存储在变量中并将其用于主查询

使用 Knex.js 进行多行插入