Node.js - 从数据库中检索数据(mysql) - 延迟

时间:2012-02-05 19:21:29

标签: mysql node.js

我使用node.js的mysql驱动程序从数据库加载数据。 https://github.com/felixge/node-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);

输出:

写行:

END QUERY
[]
ID: 1

1 个答案:

答案 0 :(得分:2)

这就是Node的工作方式 - 使用异步模型。首先执行所有代码执行,包括console.log(users)。此时,users是一个空数组。

只有执行了所有命令性指令后才会触发回调 - 例如selectCb函数。只有在回调运行后,您才能访问users

实际上,这是Node的全部观点和目的,了解这里的基本原理非常重要。您可以在以下位置了解更多信息: http://shinetech.com/thoughts/articles/139-asynchronous-code-design-with-nodejs-

其他人也推荐此视频介绍Ryan Dahl的Node: http://www.youtube.com/watch?v=jo_B4LTHi3I

在您的具体情况下,我会将console.log("END QUERY")console.log(users)行移动到selectCb函数的正文中。