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
。