如何在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()
方法没有任何参数对我有效。