我在我的服务器上使用node.js,并使用redis keystore 来存储有关我的角色的数据。每个连接都有其自己的特征。我想将有关字符(人,其姓名,年龄,职业等)的所有数据获取到字符数组中,这样我就可以有选择地将其发送到连接的客户端。
var Characters = [];
for (var ID in Connections) {
redis_client.HGETALL(ID, function(err, result) {
if (result) {
Characters.push(result);
}
});
}
console.log(Characters);
我读到,这是由于异步与同步问题造成的,所以我制作了全局变量字符。
//global variables
var character;
//function code
var Characters = [];
for (var ID in Connections) {
redis_client.HGETALL(ID, function(err, result) {
character = result;
});
if(character) {
console.log(character); // returns correct result
// make copy of character
Characters.push(JSON.parse(JSON.stringify(character)));
character = undefined;
}
}
console.log(Characters); // array of 1 character * number of connection
//BUT I expect different character for each connection
最佳答案
有不同的方法,
最简单的方法是创建一个接一个的调用异步函数,如下
var Characters = [];
var objectKeys = Object.keys(Connections);
var ID = 0;
if (ID < objectKeys.length)
doCall(objectKeys[ID]);
else
console.log(Characters);
function doCall(key) {
redis_client.HGETALL(key, function(err, result) {
if (result) {
Characters.push(result);
}
ID++;
if ( ID < objectKeys.length)
doCall(objectKeys[ID]);
else
console.log(Characters);
});
}
关于javascript - 从异步回调函数将对象推送到本地数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24341529/