Website-Suche

javascript - Variable vom Konfigurationsdienst in einen Typescript-Dekorator übergeben


Ich möchte eine geplante Aufgabe für meine NestJs-Anwendung erstellen. Sie sollte alle X Sekunden ausgeführt werden, daher verwende ich Intervalle wie hier beschrieben.

Die Anwendung verwendet Konfigurationsdateien, sodass ich das Intervall konfigurierbar halten könnte. Aber wie würde ich eine Variable an den Typescript-Dekorator übergeben?

NestJs stellt ein Beispiel-Repository für geplante Aufgaben bereit

Also basierend auf dem Beispiel möchte ich etwas wie

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

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

Muss ich das SchedulerRegistry wie unten in den Dokumenten beschrieben verwenden? Es scheint, dass dies mit Standard-Typescript nicht möglich ist, siehe diesen Thread.

Antwort #1

Das ist mit der deklarativen API (Annotationen) nicht möglich, Sie müssen den Cron-Job dynamisch registrieren (siehe die Dokumentation):

@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.schedulerRegistry.addInterval('my-dynamic-interval', interval);
  }

  handleInterval() {
    // ...
  }
}