我使用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
答案 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
函数的正文中。