this.getDaysDifference
не указывает на экземпляр класса Scheduler
в вашем обратном вызове, поскольку вы использовали function
.
. Есть два способа исправить это. :
Используйте функцию стрелки () => {}
, которая очень прямолинейна.
Свяжите this
с вашим экземпляром явно, используя functionObj.bind(yourInstance)
.
Вы можете использовать функцию стрелки, которая связывает this
с лексическим этим в вашем определении обратного вызова:
new CronJob('0 */1 * * * *', async () => {
let messages = await MessageModel.find();
for (const msg of messages) {
//this will be the lexical this i.e. point to the instance o sthe Scheduler class
console.log(this.getDaysDifference(new Date(), msg.lastScheduler));
}
});
Решение с использованием bind
, где вы явно привязываете значение this
к экземпляру вашего класса:
let cronJobCallback = async function () {
let messages = await MessageModel.find();
for (const msg of messages) {
// HERE NOT WORKING
console.log(that.getDaysDifference(new Date(), msg.lastScheduler));
}
}
cronJobCallback = cronJobCallback.bind(this);
new CronJob('0 */1 * * * *', cronJobCallback);