Typescript Nest Scheduler-通过applyDecorators与其他decorator组合时,Cron decorator缺少依赖项

Typescript Nest Scheduler-通过applyDecorators与其他decorator组合时,Cron decorator缺少依赖项,typescript,dependency-injection,cron,nestjs,scheduling,Typescript,Dependency Injection,Cron,Nestjs,Scheduling,我试图构建一个cron装饰器,它在执行任务时还记录任务的名称。 为此,我在以下文件中将默认的nestjs调度Cron decorator与自定义的LogTask decorator组合在一起: //cron-with-log.decorator.ts 常量CronWithLog=( taskName:string, cronTime:string | Date, 选项?:cron选项, ) => { 返回applydcorators(LogTask(taskName)、Cron(cronTime

我试图构建一个cron装饰器,它在执行任务时还记录任务的名称。 为此,我在以下文件中将默认的nestjs调度Cron decorator与自定义的LogTask decorator组合在一起:

//cron-with-log.decorator.ts
常量CronWithLog=(
taskName:string,
cronTime:string | Date,
选项?:cron选项,
) => {
返回applydcorators(LogTask(taskName)、Cron(cronTime、options));
};
导出默认CronWithLog;

//log-task.decorator.ts
const LogTask=(taskName)=>{
return(target:any,propertyKey:string,descriptor:PropertyDescriptor)=>{
const targetFunc=descriptor.value;
常量记录器=新记录器(“调度器”);
descriptor.value=(…args:any[])=>{
log(`Executing Task:${taskName}`);
targetFunc.apply(此参数为args);
};
返回描述符;
};
};
导出默认日志任务;
以下是我如何使用它:


@Injectable()
export class Task {
  constructor(
    private readonly taskService: TaskService,
  ) {}

  @CronWithLog('Example Task', '* * * * * *')
  async run() {
    console.log(taskService.get(1))
  }
}

日志工作:

[Nest]98-02/12/2021,7:36:07 AM[调度程序]执行任务:示例任务

但是依赖项
TaskService
未初始化,任务本身失败。如果我将我的
cron with log.ts
applyDecorators
中装饰程序的顺序切换到
applyDecorators(cron(cron(cronTime,options)、LogTask(taskName))
,则不会执行日志记录和任务。使用默认的Cron decorator运行作业也可以


我是否缺少在LogTask函数中初始化依赖项的功能?

问题在于此处使用的箭头函数:

descriptor.value = (...args: any[]) => {
      logger.log(`Executing Task: ${taskName}`);
      targetFunc.apply(this, args);
    };
通过使用它,
这个
只保存对装饰器本身的引用。将其替换为
函数(…args:any[]){…}
将提供类的实例,在该类中,装饰器用于
以及所有初始化的依赖项