类型错误:无法读取未定义的属性“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。但如果是这样的话,我该如何访问地图呢?


感谢您的帮助


慕尼黑的夜晚无繁华
浏览 133回答 2
2回答

ABOUTYOU

你是对的,你无法访问函数内的变量,因为它超出了范围。设置一个等于函数外部范围的变量,并在函数内使用它,如下所示: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)            }        });    });};

慕村225694

此错误意味着“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)   }}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript