【问题标题】:NodeJS - Events.js cannot read property forEach of undefinedNodeJS - Events.js 无法读取未定义的属性
【发布时间】:2017-04-12 09:00:07
【问题描述】:

我在两天前就遇到了一个问题,我不知道如何解决它。我在 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) 

但我不知道为什么!谢谢你的帮助。

问有控制台日志数据的输出:

编辑工作代码,感谢@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);

【问题讨论】:

  • 那部分前两行你有console.log(data),它的输出是什么?
  • 用输出更新了我的帖子,然后当错误下降时,我得到“未定义”。我正在从 twit 接收数据
  • 您显示的数据似乎是数组中的对象---> [{}]

标签: javascript node.js error-handling


【解决方案1】:

上线:

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){...

【讨论】:

  • 是的,我已经想出了这样的事情,我已经把整个东西放在了 tweet.Model 中,如果 (data && !err) 所以它应该很好!感谢您的帮助!
猜你喜欢
  • 2017-03-06
  • 2021-12-23
  • 1970-01-01
  • 2022-09-23
  • 2022-11-29
  • 2023-02-17
  • 2017-06-17
  • 2014-07-28
  • 2017-08-30
相关资源
最近更新 更多