javascript - 从异步回调函数将对象推送到本地数组

标签 javascript node.js asynchronous redis

我在我的服务器上使用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/

相关文章:

javascript - 无法使用 Cheerio js Node 从 div 标签中抓取文本?

python - 在 Python 中使用异步

javascript - 正则表达式返回 javascript 变量

javascript - JQuery - 如何查找触发操作单击事件的 id 或行?

javascript - 一个 Promise 触发零个或多个 Promise

node.js - 通过 Node js Express 访问 AWS S3 签名 URL

Javascript SignalR 等到服务广播所有消息

javascript - 如何使用 Node JS 获取排序的文件路径列表

Javascript 全局变量不会改变

javascript - 如何在 react-bootstrap select FromControl 中获取所选选项的值