2016-06-11 48 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}); 
});