javascript - Node.JS 停止工作并且控制台充满了点

标签 javascript node.js mongodb loops foreach

屏幕截图:/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/

相关文章:

javascript - 禁止 Internet Explorer IE 脚本

javascript - 函数中的 JavaScript 'this' 在 Node 中代表什么?

javascript - 更新具有给定 ID 的对象嵌入数组,无需重组 Mongo 数据库

javascript - Node js :Not able to catch 'error' in ssh2 connection on MacOSx/Linux

node.js - 如何使用 Jest 模式匹配在一个文件夹中调用所有测试?

javascript - 按已过滤子文档数组元素的计数排序

mongodb - 查找数组中的最大元素

javascript - 如何使用任何 Node 库尤其是 axios 将文件上传到服务器?

javascript - 如何在Jmeter中导入Cryptojs

javascript - 如何更改此按钮/菜单列表,以便一次只能看到一个菜单?