为了账号安全,请及时绑定邮箱和手机立即绑定

类型错误:无法读取未定义的属性“forEach”

类型错误:无法读取未定义的属性“forEach”

我用 JavaScript 和 Nodejs 介绍自己。我创建了一个带有构造函数的类。在这个构造函数中,每分钟执行一次 cron 作业。cronjob 从定义为类字段的 Map 中删除条目。class Infos{static TEN_SECS = 10000;static cron = require('node-cron');static codeMap = new Map();static evictionRegisty = new Map();constructor() {    console.log('Create repo!');    //Run each minute    cron.schedule('* * * * *', function() {        console.log('Scheduler executed!');        this.evictionRegisty.forEach((key, value, map) => {            if (key > Date.now() - TEN_SECS){                this.codeMap.delete(value);                this.evictionRegisty.delete(key);                console.log('Remove k/v =' + key + '/'+ value)            }        });    });};cronjob 工作正常,每分钟都会执行一次。无论出于何种原因,当我调用 evictionRegisty Map 的 foreach 方法时都会出现异常:TypeError: Cannot read property 'forEach' of undefined作为一名 Java 开发人员,我会说在调度函数的这个范围内没有 Map。但如果是这样的话,我该如何访问地图呢?感谢您的帮助
查看完整描述

2 回答

?
ABOUTYOU

TA贡献1812条经验 获得超5个赞

你是对的,你无法访问函数内的变量,因为它超出了范围。


设置一个等于函数外部范围的变量,并在函数内使用它,如下所示:


class Infos{


static TEN_SECS = 10000;


static cron = require('node-cron');


static codeMap = new Map();

static evictionRegisty = new Map();


var root = this;


constructor() {

    console.log('Create repo!');

    //Run each minute

    cron.schedule('* * * * *', function() {

        console.log('Scheduler executed!');

        root.evictionRegisty.forEach((key, value, map) => {

            if (key > Date.now() - TEN_SECS){

                this.codeMap.delete(value);

                this.evictionRegisty.delete(key);

                console.log('Remove k/v =' + key + '/'+ value)

            }

        });

    });

};


查看完整回答
反对 回复 2023-07-20
?
慕村225694

TA贡献1880条经验 获得超4个赞

此错误意味着“this”对象没有“evictionRegisty”字段。这意味着它不是“Infos”类。为了解决这个问题,您需要将变量作为输入传递给回调函数,或者在调用“evictionRegisty”之前简单地释放“this”。你的循环将是:


evictionRegisty.forEach((key, value, map) => {

   if (key > Date.now() - TEN_SECS){

          this.codeMap.delete(value);

           this.evictionRegisty.delete(key);

           console.log('Remove k/v =' + key + '/'+ value)

   }

}


查看完整回答
反对 回复 2023-07-20
  • 2 回答
  • 0 关注
  • 132 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信