ScreenShot:http://i.imgur.com/Shyihhb.png
我正在尝试创建一个返回两个数组的代码,但是当函数调用代码的最后一部分时,控制台会被点(屏幕截图)淹没并停止工作,就像崩溃一样。
我正在使用MongoJS驱动程序进行数据库连接。
以下是我的代码部分:
lastcollect.find({from_id: usuario}, {limit: 10, sort: {time: -1}}, function(err, echoData) {
if (err || !echoData) {
console.log("No messages found");
} else {
var users = [];
var n = 0;
var max = echoData.length;
echoData.forEach(function(returnData) {
usercollect.findOne({idu: returnData.to_id}, {}, function(err, echoData) {
if (err || !echoData) {
console.log("Req.Info error", err);
n = n + 1;
} else {
n = n + 1;
var r = [];
r['name'] = echoData.name;
r['avatar'] = echoData.avatar;
r['phone'] = echoData.phone;
r['idu'] = echoData.idu;
users[echoData.idu] = r;
console.log('DB exec ' + n);
if (n === max) {
console.log('DB exec END');
var data = [];
data.data = echoData;
data.users = users;
console.log('users', users);
console.log('data', data);
io.sockets.emit('return lastusers ' + usuario, data);
}
}
});
});
}
});
我被困在这里4个小时,所以如果有人可以帮助我会很感激。 谢谢!
答案 0 :(得分:0)
问题在于您的行
users[echoData.idu] = r;
您正在将索引echoData.idu的值设置为r。问题是你的数组开始未初始化,我猜测echoData.idu不是一个简单的计数。你看到的","是数组中的空白点!试试看我的意思:
var testArray = [];
testArray[9] = "a";
console.log(testArray);
我建议改为说
users.push(r);
或
users[n] = r; //because n is your counter.
如果您不关心订单,您还可以使用优秀的异步npm图书馆来加速此通话:https://github.com/caolan/async