如何仅在发出 get 请求时而不是每次启动服务器时运行 cron 作业

问题描述 投票:0回答:1

我希望仅当我们发出 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();
    }
  }
cron nestjs scheduled-tasks cron-task
1个回答
0
投票

队列可能是此类事情的最佳选择。您可以在获取请求时将其添加到队列中,然后它将被处理。指挥官也可以是一个选择。

https://docs.nestjs.com/recipes/nest-commander

© www.soinside.com 2019 - 2024. All rights reserved.