Javascript Array.push无法处理Nodejs中的对象

Javascript Array.push无法处理Nodejs中的对象,javascript,arrays,node.js,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:

如何将对象作为条目添加到数组中,就像我在这里尝试的那样

 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 = [{account: 'jak', info: 0},{account: 'jil', info: 1}]

问题几乎可以肯定是,
rclient.get
是异步的,因此在循环之后检查数组太早了(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);
            }
        });
    }
});
displayAccounts(功能(数据){
var指数;
var accs=[];//[]是编写新数组()的更好方法
对于(索引=0;索引
请注意,根据
rclient.get
的工作方式,回调的顺序可能与请求的顺序相同,也可能不同



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

问题几乎肯定是
rclient.get
是异步的,所以在循环之后检查数组太快了(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);
            }
        });
    }
});
displayAccounts(功能(数据){
var指数;
var accs=[];//[]是编写新数组()的更好方法
对于(索引=0;索引
请注意,根据
rclient.get
的工作方式,回调的顺序可能与请求的顺序相同,也可能不同



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

我还建议使用类似于执行异步循环的库……是的,我必须添加
data=data[index];
rclient是我的redis客户端。行
if(accs.length==data.length)
无法正常工作,因为条目不同。@user14351:上面的代码为
数据中的每个条目安排了一个
get
accs
一开始是空的,并且每次回调都推一次
accs.length==数据。length
对于您显示的代码是正确的。但是,无论如何,根据需要进行调整。关键是,在回调发生之前,您不想使用
accs
。我还建议使用类似于执行异步循环的库……是的,我必须添加
data=data[index];
rclient是我的redis客户端。行
if(accs.length==data.length)
无法正常工作,因为条目不同。@user14351:上面的代码为
数据中的每个条目安排了一个
get
accs
一开始是空的,并且每次回调都推一次
accs.length==数据。length
对于您显示的代码是正确的。但是,无论如何,根据需要进行调整。关键是在回调发生之前,您不希望使用
accs