2012-02-05 82 views
0

我使用mysql驅動程序爲node.js加載數據庫中的數據。 https://github.com/felixge/node-mysqlNode.js - 從數據庫中檢索數據(mysql) - 延遲

我想將數據加載到數組中。當我將數據加載到數組中時 - 存在延遲並且數組爲空。我想檢索數據,然後寫下行 - console.log(「END QUERY」);的console.log(用戶);

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

這實際上是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功能。