2016-07-25 131 views
-1

我有这个函数可以连接到我的数据库并查阅其中的某些内容。将结果从一个函数传递给nodejs上的另一个函数

function conn (text){ 
var mysql  = require("mysql"); 
var connection = mysql.createConnection({ 
    connectionLimit : 100, //important 
    host  : 'xxx.xxx.xxx.xxx', 
    user  : 'xxxxxx', 
    password : 'xxxxxxx', 
    database : 'xxxxxxxx' 
}); 

connection.connect(); 

var queryString = 'SELECT usuario.idUsuario FROM usuario WHERE usuario.nickname = ' + '"' + text + '"'; 

function getID(text, callback){ 
connection.query(queryString, function(err, rows, fields) { 
    var id; 
    if (err){ 
     callback(err, null); 
    }else{ 
     for (var i in rows) { 
      id = rows[i].idUsuario; 
     } 
     callback(null, id); 
    } 
}); 
} 

var result; 
    getID(text, function(err, content) { 
    if (err) { 
     console.log(err); 
    } else { 
     result = content; 
    } 
}); 
connection.end(); 
}; 

现在,我需要得到的结果在其他变量使用它在其他功能我的JS文件中。我怎样才能得到该值,而无需在变量内获取代码?

+2

你不能做到这一点。你需要在任何地方使用回调或承诺。 http://blog.slaks.net/2015-01-04/async-method-patterns/ – SLaks

+0

im在函数getID中使用calbacks,但也许我做这个回调的错误 –

+0

你需要从你的函数返回值也使用回调。 – SLaks

回答

0

您的function conn (text)正在使用回调获取数据,您需要将该模式一直带到消费代码。我不知道什么是“其他功能”的样子,但让我们假装一个看起来是这样的:

function awesomeFunction() { 
    var sweetResult = conn('sweet nickname'); 
    alert(sweetResult); 
} 

conn是要连接并发出查询到你的数据库。你做而不是想要停止其他所有事情,并等待结果回来,你希望数据库库有结果时调用你,因此回调。由于数据库并未完全停止,控制权返回到您的conn函数,然后返回到awesomeFunction,并传递到下一行alert(sweetResult)。可是等等!你没有从conn返回任何东西,但更重要的是,数据库甚至没有回复结果!

所以,你需要awesomeFunction看起来更像是这样的:

function awesomeFunction() { 
    conn('sweet nickname', function(err, sweetResult) { 
    alert(sweetResult); 
    }); 
} 

这意味着,conn需要接受和使用回调太:

function conn (text, resultsAreInCB){ 
    ... 
    connection.query(queryString, function(err, rows, fields) { 
    var id; 
    connection.end(); 
    if (err){ 
     resultsAreInCB(err, null); 
    } else { 
     for (var i in rows) { 
     id = rows[i].idUsuario; 
     } 
     callback(null, id); 
    } 
    }); 
    ... 
}; 
+0

谢谢!它完美的工作。经过我的代码测试后,我明白了它的工作方式。 –