2016-06-11 76 views
0

我是新用这样的NodeJS我坚持与它的异步行为,特别是与查询基于KnexJS模块的NodeJS同步MySQL查询和KnexJS

这里上一个MySQL数据库与查询功能:

var getNotes = function(owner) { 
     if(owner !== undefined) { 
      knex.table('tblnotes').where('public',1).orWhere({ownerName : owner}).select('noteId').then(function(result) { 
       console.log(result); 
       return result; 
      }); 
     } 
     else { 
      knex.table('tblnotes').where('public',1).select('noteId').then(function(result) { 
       console.log(result); 
       return result; 
      }); 
     } 
} 

但是当我用它

var query = getNotes(user.username); 
console.log("authenticated"); 
console.log(query); 
console.log("--------------------------------------"); 
return res.render('authindex.ejs', {title : "Index", user : user,data : query}); 

和我登录的结果我有:

authenticated 
undefined 
-------------------------------------- 
[ { noteId: 1 } ] 
+0

使用回调进行同步行为。 –

回答

1

解决方案1 ​​:使用回调

var getNotes = function(owner, callback) { 
    if(owner !== undefined) { 
     knex.table('tblnotes').where('public',1).orWhere({ownerName : owner}).select('noteId').then(function(result) { 
      console.log(result); 
      callback(result); 
     }); 
    } 
    else { 
     knex.table('tblnotes').where('public',1).select('noteId').then(function(result) { 
      console.log(result); 
      callback(result); 
     }); 
    } 
} 

并用它在路线如下

getNotes(user.username, function(result){ 
    console.log("authenticated"); 
    console.log(result); 
    console.log("--------------------------------------"); 
    return res.render('authindex.ejs', {title : "Index", user : user,data : result}); 
}); 

解决方案2:使用承诺

var getNotes = function(owner) { 
    if(owner !== undefined) { 
     return knex.table('tblnotes').where('public',1).orWhere({ownerName : owner}).select('noteId'); 
    } 
    else { 
     return knex.table('tblnotes').where('public',1).select('noteId'); 
    } 
} 

并使用它在路线中降低:

getNotes(user.username).then(function(result){ 
    console.log("authenticated"); 
    console.log(result); 
    console.log("--------------------------------------"); 
    return res.render('authindex.ejs', {title : "Index", user : user,data : result}); 
});