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

时间:2015-03-03 17:00:39

标签: javascript node.js mongodb loops foreach

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个小时,所以如果有人可以帮助我会很感激。 谢谢!

1 个答案:

答案 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