Javascript Node.JS停止工作,控制台被点淹没

Javascript Node.JS停止工作,控制台被点淹没,javascript,node.js,mongodb,loops,foreach,Javascript,Node.js,Mongodb,Loops,Foreach,截图: 我试图编写一个返回两个数组的代码,但是当函数调用代码的最后一部分时,控制台会被大量的点截图淹没,并停止工作,就像崩溃一样 我正在使用MongoJS驱动程序进行数据库连接 以下是我的代码部分: lastcollect.find({from_id: usuario}, {limit: 10, sort: {time: -1}}, function(err, echoData) { if (err || !echoData) { console.log("No mess

截图:

我试图编写一个返回两个数组的代码,但是当函数调用代码的最后一部分时,控制台会被大量的点截图淹没,并停止工作,就像崩溃一样

我正在使用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);


如果你不在乎订单,你也可以使用优秀的异步npm库来加速这个调用,这里:

你能包括你的屏幕截图吗?我已经上传到imgur:谢谢!我已经很紧张了,我还没有看到这一点,因为节点上的控制台有时不会显示错误。
users[n] = r; //because n is your counter.