如何将 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 中执行?