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() {
// ...
}
}
