2

在 Typescript 中,我有一个控制器类,它有一个我想每天早上 5 点运行的方法。

我的第一个想法是使用 node-cron 或 node-scheduler 来安排一些事情,但这些似乎严格用于 node 项目,而不是 typescript。

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

不过,似乎没有任何关于如何做到这一点的解释。我看到的解释都是关于按某个时间表运行 node.js 函数,例如这个: 我需要一个 Nodejs 调度程序,它允许以不同的时间间隔执行任务

下面的代码说明了我正在尝试做的最好的近似。

控制器.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();
4

1 回答 1

7

我确实使用cron及其类型

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. 这只是一个例子。

于 2020-11-10T22:27:45.703 回答