2012-02-05 13 views
0

node.jsのmysqlドライバを使用してデータベースからデータをロードしています。 https://github.com/felixge/node-mysqlNode.js - データベースからデータを取得する(mysql) - 遅延

データを配列にロードします。配列にデータをロードするときに遅延があり、配列が空です。

私は、データを取得して、その行にconsole.log( "END QUERY")を書きたいと思います。 console.log(users);

var users = []; 

client.query(
    'SELECT * FROM users', 
    function selectCb(err, results, fields) { 
    if (err) { 
     throw err; 
    } 

if (results.length > 0) { 
      var reader = results[0]; 
      console.log("ID: " + reader['id']); //ADD string - 'ID: 1' 
      users = [reader['id']] 
     } 
    } 
); 

console.log("END QUERY"); 

console.log(users); 

OUTPUT:

ライト線:

END QUERY 
[] 
ID: 1 

答えて

2

これは、ノードがどのように働くかある - 非同期モデルを使用。最初に書かれたすべてのコードが実行されます(console.log(users)など)。この時点で、usersは空の配列です。

すべての命令が実行されると、selectCbのようなコールバックが発生します。このコールバックが実行された後で、usersにアクセスできるのは1回だけです。

これは実際にNodeの全体的な目的と目的であり、ここでの基本を理解することは非常に重要です。あなたがでそれについての詳細を読むことができます: http://shinetech.com/thoughts/articles/139-asynchronous-code-design-with-nodejs-

その他にも、ライアン・ダールからのノードを導入し、このビデオを推奨している: http://www.youtube.com/watch?v=jo_B4LTHi3I

あなたの特定のケースでは、私はの体内にconsole.log("END QUERY")console.log(users)ラインを移動しますselectCb機能。

関連する問題