Ste*_*lde 6 cron scheduling typescript nestjs
通过 NestJS 中的声明式任务调度,上下文会保留在计划任务中,因此下面的代码可以正常工作。
@Injectable()
export class SchedulerService {
private readonly log: Logger;
constructor(
@Inject(WINSTON_MODULE_PROVIDER) logger: Logger,
private schedulerRegistry: SchedulerRegistry
) {
this.log = logger.child({ context: 'scheduler service' });
}
@Cron('*/5 * * * * *')
myScheduledTask(): void {
this.log.info('test');
}
Run Code Online (Sandbox Code Playgroud)
然而,动态调度同一个任务时,this.log是undefined在scheduled函数中。这怎么可能 ?
@Injectable()
export class SchedulerService {
private readonly log: Logger;
constructor(
@Inject(WINSTON_MODULE_PROVIDER) logger: Logger,
private schedulerRegistry: SchedulerRegistry
) {
this.log = logger.child({ context: 'scheduler service' });
const userSyncJob = new CronJob('*/5 * * * * *', this.myScheduledTask);
schedulerRegistry.addCronJob(syncJobName, userSyncJob);
userSyncJob.start();
}
myScheduledTask(): void {
this.log.info('test');
}
}
Run Code Online (Sandbox Code Playgroud)
24/7 08:12:09 [error] Nest : uncaughtException: Cannot read property 'info' of undefined
TypeError: Cannot read property 'info' of undefined
at CronJob.syncUsers (C:\Users\lcartreul\Documents\projecten\rsa-user-management\src\otherservices\scheduler.service.ts:39:14)
at CronJob.fireOnTick (C:\Users\lcartreul\Documents\projecten\rsa-user-management\node_modules\cron\lib\cron.js:562:23)
at Timeout.callbackWrapper [as _onTimeout] (C:\Users\lcartreul\Documents\projecten\rsa-user-management\node_modules\cron\lib\cron.js:629:10)
at listOnTimeout (internal/timers.js:549:17)
at processTimers (internal/timers.js:492:7)
Run Code Online (Sandbox Code Playgroud)
const userSyncJob = new CronJob('*/5 * * * * *', this.myScheduledTask.bind(this));
Run Code Online (Sandbox Code Playgroud)
或者
const userSyncJob = new CronJob('*/5 * * * * *', () => this.myScheduledTask());
Run Code Online (Sandbox Code Playgroud)
不客气
| 归档时间: |
|
| 查看次数: |
6080 次 |
| 最近记录: |