2016-06-11 6 views
0

私はその非同期動作とこだわっているので、私はKnexJSモジュールここ同期のMySQLのクエリとKnexJS

に基づいてMySQLデータベースへのクエリで、特に、NodeJsに新たなんだが、クエリの関数であります:

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}); 

を使用して、私は私が持っている結果ログインしたとき:

を210
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'); 
    } 
} 

し、それを使用を約束しますフォルクスワーゲlowing:

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}); 
});