我将用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。但是如果是这样,我如何访问地图?
感谢您的帮助
答案 0 :(得分:2)
是的,您不能访问函数中的变量,因为它不在范围内。
设置一个等于函数外部作用域的变量,并在函数内部使用它,就像这样:
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)
}
});
});
};
答案 1 :(得分:0)
此错误表示“此”对象没有“ evictionRegisty”字段。这意味着它不是“信息”类。为了解决这个问题,您需要将变量作为输入传递给回调函数,或者在调用“ 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)
}
}