Array.push不使用Nodejs中的对象

时间:2014-03-26 21:55:20

标签: javascript arrays node.js

如何将对象添加为数组的条目,例如我在这里尝试...

 displayAccounts(function(data){
    var index;
    var accs = new Array();
    for (index = 0; index < data.length; ++index) {
      rclient.get(data.account, function (info) {
        accs.push({
            account: data.account,
            info: info
          });
      });
    }
    console.log(accs);
  });

输出:

accs = []

理想的解决方案:

accs = [{account: 'jak', info: 0},{account: 'jil', info: 1}]

1 个答案:

答案 0 :(得分:5)

问题几乎可以肯定是rclient.get 异步,所以在你的循环过早检查之后检查数组(获取已经启动,但他们还没有完成);它将被异步发生的回调填充。等到最后一次回调发生,例如:

displayAccounts(function(data){
    var index;
    var accs = []; // [] is a better way to write new Array()
    for (index = 0; index < data.length; ++index) 
        rclient.get(data.account, function (info) {
            accs.push({
                account: data.account,
                info: info
            });
            if (accs.length === data.length) {
                // We're done, *now* look at / use the array
                console.log(accs);
            }
        });
    }
});

请注意,根据rclient.get的工作原理,回调可能会或可能不会以与请求相同的顺序发生。


旁注:rclient.get(data.account, ...看起来很可疑,您反复请求相同的信息。也许是rclient.get(data[index].account, ...