2012-03-21 114 views
1

如何从节点mysql返回结果 https://github.com/felixge/node-mysql 我试图访问函数外部返回的结果。如何从节点mysql返回结果

var mysql = require('mysql'); 
var TEST_DATABASE = 'zenoir'; 
var TEST_TABLE = 'tbl_sessions'; 
var client = mysql.createClient({ 
    user: 'root', 
    password: 'secret', 
}); 

var outer = 20; 
client.query('USE '+TEST_DATABASE); 

client.query(
    'SELECT ses_title FROM '+TEST_TABLE, 
    function selectCb(err, results, fields) { 
    if (err) { 
     throw err; 
    } 


    var boom = results; 
    var rooms = []; 
    var index = 0; 
    var name = 'session'; 

    for(var b in boom){ 
     rooms[b] = {}; 
     rooms[b][name + index] = boom[b]['ses_title']; 
     index += 1; 
    } 

    var exe = {}; 
for(var mon in rooms){ 
for(var zeb in rooms[mon]){ 
    exe[mon] = rooms[mon][zeb]; 
} 

} 


    outer = exe; //I want to access the exe variable outside the function scope 

    client.end(); 
    } 
); 

console.log(outer); //I still get the initial value 20 in here. 
+0

从未听说过异步? – Shikiryu 2012-03-21 11:49:04

+0

我还没有听说过它。 – user225269 2012-03-21 11:57:02

回答

3

好吧,你可以看到herequery()可以与那些PARAMS使用:

  • SQL查询,SQL查询参数,在完成回调
  • SQL查询,在完成
  • 回调

您正在使用第二个。

回调函数仅在查询完成时激活(这意味着,它可能需要时间)。 JavaScript不会停止您的查询并继续使用脚本(console.log(outer);),并且当您的查询完成后,它将应用回调函数并更改outer