NodeJS: передача переменной во вложенную функцию - PullRequest
0 голосов
/ 01 октября 2018

Я пытаюсь передать службу, которая была введена в зависимости.Первый вызов этой функции работает.Но когда я вызываю внедренную функцию в другой вложенной функции, я получаю сообщение об ошибке.

Код контроллера:

class CronScheduleController {

constructor(log, calculationService) {
    this.log = log;
    this.calculationService = calculationService;
}

async weeklyCronJob() {

    this.log.info('Weekly CRON Job is running');

    var rule = new schedule.RecurrenceRule();     

    var job = schedule.scheduleJob(rule, function () {
        this.log.info('Weekly CRON Job Started');
    });

  }
}

Я получаю первый журналmessage => 'Еженедельное задание CRON выполняется'

Но второе сообщение журнала выдает ошибку => 'Еженедельное задание CRON запущено'

Ошибка:

/ controllers / cronSchdule.js: 28 logger.info («Еженедельное задание CRON запущено»);^

Ошибка типа: logger.info не является функцией

Может кто-нибудь помочь решить эту проблему ./

Заранее спасибо.

1 Ответ

0 голосов
/ 01 октября 2018

Когда вы находитесь внутри функции, ключевое слово this представляет не класс, а лексическую область действия функции, попробуйте функцию стрелки (предполагается ES6, поскольку вы используете async await)

constructor(log, calculationService) {
    this.log = log;
    this.calculationService = calculationService;
}

async weeklyCronJob() {

    this.log.info('Weekly CRON Job is running');

    var rule = new schedule.RecurrenceRule();

    var job = schedule.scheduleJob(rule, () => {
        this.log.info('Weekly CRON Job Started');
    });

}

Если не создать объект refrence, тогда получить доступ к классу, используя refrence,

constructor(log, calculationService) {
    this.log = log;
    this.calculationService = calculationService;
}

async weeklyCronJob() {

    this.log.info('Weekly CRON Job is running');

    var rule = new schedule.RecurrenceRule();
    var that = this; // <== HERE

    var job = schedule.scheduleJob(rule, function() {
        that.log.info('Weekly CRON Job Started'); // <== HERE
    });

}
...