2016-07-25 46 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

謝謝!它完美的工作。經過我的代碼測試後,我明白了它的工作方式。 –

相關問題