我正在使用用于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
函数的主体中。