2012-02-05 124 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功能。