Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/440.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在javascript中使用knex进行select*?_Javascript_Node.js_Knex.js - Fatal编程技术网

如何在javascript中使用knex进行select*?

如何在javascript中使用knex进行select*?,javascript,node.js,knex.js,Javascript,Node.js,Knex.js,我有这样一个函数: function get_projects() { var project_names=[]; knex('projects').select('name').then(function (a) { project_names.push(a); }) return project_names; } 此函数执行return语句returnproject\u name在完成project\u name.push(a)语句之前,调

我有这样一个函数:

function get_projects() {
    var project_names=[];
    knex('projects').select('name').then(function (a) { 
        project_names.push(a);
    })
    return project_names;
}

此函数执行return语句
returnproject\u name在完成
project\u name.push(a)
语句之前,调用此函数后得到的是一个空数组,即使我的数据库有结果(如果我在函数a()中登录,我可以看到这一点)

节点是异步的,所以只要行
knex('projects')。选择('name')。然后执行…
,行“return project_names;”他跑了。正如您所发现的,它并没有等到它充满了值

方法末尾的标准“return”对于基于事件的Nodejs来说不是一种好的编程风格。它有自己的位置,但更常见的是回调方法。考虑阅读一些关于这个新方法的教程(我喜欢)

您可以将当前代码更改为以下内容:

function print_project_names() {
  get_projects( function(names){
    for( var i = 0; i < names.length; i++ )
    {
      console.log(names[i]+'\n');
    } 
  });
}

function get_projects( callback ) {
  var project_names=[];
  knex('projects').select('name').then(function (a) { 
     project_names.push(a);
     callback(project_names);
  })
}
函数打印项目名称(){
获取项目(函数(名称){
对于(var i=0;i
注意:这不是优化的代码

在这里,当您想要打印项目名称(不确定您的真正目标)时,您正在将实际的函数定义作为“回调”传递到“get_projects”中。当事件触发时,一旦结果被推送到项目名称中,将使用新列表调用回调。

knex select()返回一个承诺,以便您可以在then()函数中继续流程

knex('projects').select('name').then(function(projectNames){
    //do something here
    console.log(projectNames);
});

我知道这很旧,但你可以这样做:

function get_projects() {
    return knex('projects').select('name')
        .then(function (records) {
           // already returns an array you can do other things here
           return records;
        })
}
现在您可以这样做来访问数据

get_projects()
    .then(function (records) {
        // do what you need as well, like send to the frontend using express
        res.send(records);
    })

您的问题是“如何从中选择”。。。。这是谷歌在询问如何从knex中选择*时得到的最高结果。不幸的是,在你的问题主体中,你根本不想选择。。。您特别想选择一个列。如果有人来这里寻找
select*
,那么
.select()
方法没有任何参数对我有效。