我希望仅当我们发出 get 请求时才触发 cron 作业,这是第一次,但如果我保存它,它将再次重新运行。
该代码不会在服务器启动或重新启动时运行,但一旦我到达该特定端点,它就会在每次服务器重新启动时运行。
startTime = new Date().getTime();
numberOfMinutes = 10;
@Cron(CronExpression.EVERY_MINUTE, {
name: 'myJob',
})
async getParisAirQuality() {
this.logger.verbose(`Getting paris air quality`);
const result = await this.getCityAirQuality({
latitude: '48.856613',
longitude: '2.352222',
});
const airQuality = new this.airQualityModel({
result,
datetime: new Date().toLocaleString(),
});
await airQuality.save();
this.closeJob();
return {
result: airQuality.result,
datetime: new Date().toLocaleString(),
};
}
closeJob() {
const job = this.schedulerRegistry.getCronJob('myJob');
const endTime = this.startTime + 1000 * 60 * Number(this.numberOfMinutes);
if (job.lastDate().getTime() >= endTime) {
job.stop();
}
}
队列可能是此类事情的最佳选择。您可以在获取请求时将其添加到队列中,然后它将被处理。指挥官也可以是一个选择。