我正在使用用于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

最佳答案

这就是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函数的主体中。

08-07 15:12
查看更多