如何为打字稿类方法进行Cron作业

问题描述

在Typescript中,我有一个控制器类,该类具有一个我想每天凌晨5点运行的方法

我的第一个想法是使用node-cron或node-scheduler来调度某些内容,但是这些似乎严格地用于节点项目,而不是打字稿。

我需要做的是:a)将我的整个打字稿项目转换为节点,然后b)按计划运行该方法

尽管如此,似乎没有任何解释。我看到的解释都是关于按一定时间表运行node.js函数的,例如: I need a Nodejs scheduler that allows for tasks at different intervals

下面的代码说明了我在尝试执行的操作时的最佳近似效果

controller.ts

import SomeOtherClass from './factory';

class MyController {
    public async methodToRun(){
        console.log ("King Chronos")
    }
}

cron-job.ts

import MyController from "../src/controller";

let controller = new MyController();
var cronJob = require('cron').CronJob;
var myJob = new cronJob('00 30 11 * * 1-5',function(){
      controller.methodToRun();
      console.log("cron ran")
});
myJob.start();

解决方法

我确实使用了cron及其types

npm i cron
npm i -D @types/cron

因为有可用的类型,所以它与TypeScript可以很好地工作。在我的TypeScript中,我做类似的事情:

import { CronJob } from 'cron';

class Foo {

  cronJob: CronJob;

  constructor() {
    this.cronJob = new CronJob('0 0 5 * * *',async () => {
      try {
        await this.bar();
      } catch (e) {
        console.error(e);
      }
    });
    
    // Start job
    if (!this.cronJob.running) {
      this.cronJob.start();
    }
  }

  async function bar(): Promise<void> {
    // Do some task
  }
}

const foo = new Foo();

当然,无需在Foo的构造函数中启动作业。这只是一个例子。