屏幕截图:/image/i2UvF.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 个小时,所以如果有人能提供帮助,我将不胜感激。 谢谢!
最佳答案
问题出在你的线路上
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
关于javascript - Node.JS 停止工作并且控制台充满了点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28837595/