NodeJS - Events.js无法读取每个未定义的属性

时间:2017-04-12 09:00:07

标签: javascript node.js error-handling

我2天后面临一个问题,我无法弄清楚如何修复它。我在forEach上发生错误,因此我的应用程序运行良好,然后在没有任何解释的情况下停止。

以下是发生错误的代码。

    var easy = setInterval(function(){
        keywords.forEach(function(k) {
            tweetModel.find({keyword: k}).sort({date: -1}).limit(20).exec(function(err, data) {
                var score = [];
                var date = [];
                console.log(data);
                console.log(err)
                data.forEach(function (item) {
                    score.push(Math.floor(parseFloat(item.score) * 1000) / 1000);
                    date.push(item.date.getDate()+'/'+parseInt(item.date.getMonth() + 1)+'/'+item.date.getFullYear()+':'+parseInt(item.date.getHours() + 1)+':'+item.date.getMinutes());

                    tArrayStats[k] = score;
                    tArrayStats['date'] = date;
                });

            });

        });

        io.sockets.emit('stats',tArrayStats);
    },3000);

此处引发错误

data.forEach(function (item) 

但我无法弄明白为什么!谢谢你的帮助。

根据要求,有控制台日志数据的输出:

enter image description here

已编辑的工作代码,感谢@Ids van der Zee

var easy = setInterval(function(){
    keywords.forEach(function(k) {

        tweetModel.find({keyword: k}).sort({date: -1}).limit(20).exec(function(err, data) {
            if (data && !err)
            {
                var score = [];
                var date = [];
                console.log(data);
                console.log(err)

                data.forEach(function (item) {
                    score.push(Math.floor(parseFloat(item.score) * 1000) / 1000);
                    date.push(item.date.getDate()+'/'+parseInt(item.date.getMonth() + 1)+'/'+item.date.getFullYear()+':'+parseInt(item.date.getHours() + 1)+':'+item.date.getMinutes());

                    tArrayStats[k] = score;
                    tArrayStats['date'] = date;
                });
            }

        });
    });

    io.sockets.emit('stats',tArrayStats);
},3000);

1 个答案:

答案 0 :(得分:2)

就行:

tweetModel.find({keyword: k}).sort({date: -1}).limit(20).exec(function(err, data) {

您正在尝试查找与关键字k对应的数据,您正在为每个关键字执行此操作。如果tweetModel不包含您要查找的关键字,则数据变量将是未定义的。您可以通过检查数据是否未定义来解决此问题。而不是

data.forEach(function (item){...

    if(data){
       data.forEach(function (item){...