2016-07-25 28 views
-1

私のDBに接続してその中の何かを調べるこの機能があります。関数からの結果を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 awesomeFunction() { 
    var sweetResult = conn('sweet nickname'); 
    alert(sweetResult); 
} 

conn

を接続して、DBへのクエリを発行する予定です。 ではないは他のすべてのものを停止し、結果が戻ってくるのを待っています。結果があるときにコールバックするようにdbライブラリを呼び出す必要があります。データベースはすべてを停止していないので、制御は 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

ありがとうございます!、それは完全に動作します。私のコード上でテストした後、私はそれが動作する方法を理解しました。 –

関連する問題