0

node-mysql がquery返されundefinedます。

これが私のコードです:

Hash.prototype.GetHash = function()
    {
        var test;
        var connection = this.config.CreateConnection();
        connection.connect(function(err){
           if (err)
               throw err;
           else
           {
               var query = "SELECT hash FROM test WHERE id = 1";
               connection.query(query, function(err, rows, result){
                  if (err)
                      throw err;
                  else
                  {
                      test = rows[0].hash;
                      console.log(test);
                  }
               });
               connection.end(function(err){
                   if (err)
                       throw err;
               });
           }
        });
        return test;
    }

console.log で正しい結果が得られます1a2b3c4d。そう。このメソッドを main メソッドに呼び出すと、次のようになります。

    var h = hash.GetHash();
    console.log(h);

コンソールは私に結果を与えますundefined

そこで、文字列クラスから新しいオブジェクトをキャスト、再入力、作成しようとしました:このオブジェクトtest は次のようになります:

var test = '';
var test = new String;
var test = new String(rows[0].hash);

そして、成功せずに:\この問題について誰か助けてくれませんか? どうもありがとう!

4

1 に答える 1

4

Node.js は非同期です。Hash.prototype.GetHash = function() {}呼び出されるとすぐに値を返しますが、まだ実行されていないため、コードは機能しません。したがって、テストを印刷すると、未定義になります。

関数が計算して返そうとしているものを使用testするには、関数が完了した後で、それを使用するための引数として test を指定して callback を使用する必要があります。関数にいくつかの変更を加える必要があります。

Hash.prototype.GetHash = function(callback){
//pass callback in arguments if you want it to be provided when calling
...  //compute test
//return test; Dont do return, do callback
callback(test);
}

//Your definition of callback should be
callback = function(h){
console.log(h);
}

詳細については、チュートリアルを参照してください。

  1. http://docs.nodejitsu.com/articles/getting-started/control-flow/how-to-write-asynchronous-code
  2. http://howtonode.org/control-flow
  3. http://howtonode.org/control-flow-part-ii
于 2013-02-22T16:24:35.190 に答える