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

Node.js 如何将knex查询存储在变量中?,node.js,postgresql,orm,Node.js,Postgresql,Orm,有没有办法在knex查询中存储变量?现在,我可以通过执行以下操作来console.log查询结果: knex.select().table('users').then(function(result) { result.forEach(function(value) { console.log(value); }); }); 但是我想将查询结果存储在一个变量中—类似于这样: var query = knex.select().table('users') 所以

有没有办法在knex查询中存储变量?现在,我可以通过执行以下操作来console.log查询结果:

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

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

将结果传递到
后,您需要处理/使用这些结果,然后

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

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

将结果传递到
后,您需要处理/使用这些结果,然后

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

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

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

这是因为您正在进行异步调用。这里有更多信息:knex返回一个承诺,因此您需要使用async/await或解析该承诺来将查询结果存储在一个变量中。对于例如
var query=await knex.select().table('users')
这是因为您正在进行异步调用。这里有更多信息:knex返回一个承诺,因此您需要使用async/await或解析该承诺来将查询结果存储在一个变量中。对于eg
var query=wait knex.select().table('users')