передача переменной из службы конфигурации в декоратор Typescript - PullRequest
0 голосов
/ 11 января 2020

Я хотел бы создать запланированное задание для своего приложения Nest Js. Он должен выполняться каждые X секунд, поэтому я использую интервалы, как описано здесь .

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

Nest Js предоставляет пример репозитория для запланированных задач

Так что на основе примера я бы хотел бы иметь что-то вроде

@Injectable()
export class TasksService {
  constructor(
    private readonly myConfigService: MyConfigService,
  ) {}

  @Interval(this.myConfigService.intervalInMilliseconds)
  handleInterval() {
    // ...
  }
}

Должен ли я использовать SchedulerRegistry, как описано ниже в документации? Кажется, что это невозможно со стандартным Typescript, см. эту тему .

1 Ответ

1 голос
/ 11 января 2020

Это невозможно с декларативным API (аннотации), вам нужно динамически зарегистрировать задание cron (см. документы ):

@Injectable()
export class TasksService implements OnModuleInit {
  constructor(
    private readonly myConfigService: MyConfigService,
    private readonly schedulerRegistry: SchedulerRegistry,
  ) {}

  onModuleInit() {
    const interval = setInterval(() => this.handleInterval, this.myConfigService.intervalInMs);
    this.scheduler.addInterval('my-dynamic-interval', interval);
  }

  handleInterval() {
    // ...
  }
}
...