Maison > interface Web > js tutoriel > Comment utiliser Node Schedule pour créer des tâches planifiées dans des projets de nœuds

Comment utiliser Node Schedule pour créer des tâches planifiées dans des projets de nœuds

青灯夜游
Libérer: 2021-11-17 19:29:17
avant
3477 Les gens l'ont consulté

Comment créer une tâche planifiée dans le projet node ? L'article suivant vous expliquera comment utiliser Node Schedule pour développer des scripts de tâches planifiées dans des projets de nœuds. J'espère qu'il vous sera utile ! Le backend de

Comment utiliser Node Schedule pour créer des tâches planifiées dans des projets de nœuds

nodejs a également besoin de tâches planifiées pour être traitées, telles que la sauvegarde, l'envoi programmé d'e-mails, le règlement et d'autres opérations, nous utilisons donc le npm Node Schedule pour nous aider à développer des scripts de tâches planifiées.

npm install node-schedule
Copier après la connexion

Chaque tâche planifiée dans Node Schedule est représentée par un objet Job. Vous pouvez le créer manuellement, puis exécuter la méthode schedule() pour appliquer la tâche, ou utiliser scheduleJob() comme suit. Job对象表示。可以手动创建,然后执行schedule()方法以应用任务,或使用scheduleJob()如下。

Job对象是`EventEmitter,并发出以下事件:

  • run每次执行后的事件。
  • scheduled每次计划运行时的事件。
  • canceled,当它在执行之前调用被取消的事件。
  • 一个error当被触发调度作业调用抛出或退出事件拒绝Promise

scheduledcanceled事件都接收一个 JavaScript 日期对象作为参数)。 注意的是,任务是第一次立即执行的,因此如果使用scheduleJob()方法创建任务,将错过第一个scheduled

L'objet Job est un `EventEmitter et émet les événements suivants :

  • run après chaque exécution.
  • planifiésÉvénements à chaque exécution du planning.
  • Un événement annulé qui est annulé lorsqu'il est appelé avant l'exécution.
  • Une erreur est générée lorsqu'un appel de tâche planifié est déclenché ou que l'événement de sortie rejette une Promesse.
(Les événements programmés et annulés reçoivent un objet date JavaScript en tant que paramètre). Notez que la tâche est exécutée immédiatement pour la première fois, donc si vous utilisez la méthode scheduleJob() pour créer une tâche, vous manquerez le premier déclenchement d'événement programmé, mais vous pouvez manuellement interroger l'appel.

Format Cron
*    *    *    *    *    *
┬    ┬    ┬    ┬    ┬    ┬
│    │    │    │    │    │
│    │    │    │    │    └ day of week (0 - 7) (0 or 7 is Sun)
│    │    │    │    └───── month (1 - 12)
│    │    │    └────────── day of month (1 - 31)
│    │    └─────────────── hour (0 - 23)
│    └──────────────────── minute (0 - 59)
└───────────────────────── second (0 - 59, OPTIONAL)

每分钟的第30秒触发: '30 * * * * *'

每小时的1分30秒触发 :'30 1 * * * *'

每天的凌晨1点1分30秒触发 :'30 1 1 * * *'

每月的1日1点1分30秒触发 :'30 1 1 1 * *'

2016年的1月1日1点1分30秒触发 :'30 1 1 1 2016 *'

每周1的1点1分30秒触发 :'30 1 1 * * 1'
Copier après la connexion

Voici une utilisation personnelle de la classe d'encapsulation node-schedule pour utiliser l'ajout, la suppression, la modification et la vérification des tâches planifiées
const schedule = require('node-schedule');

exports.Interval = class Interval {
  constructor({ unit_name, maintain_time, last_alarm }) {
    this.unit_name = unit_name          // 任务名字
    this.maintain_time = maintain_time  // 定时时间
    this.last_alarm = last_alarm || ""        // 上一次定时任务名字
  }

  // 生成新的定时任务
  async create(callback) {
    // 终止之前的定时任务
    if (this.last_alarm !== "") {
      this.delete(this.last_alarm)
    }
    schedule.scheduleJob(`${this.unit_name}`, `${this.maintain_time}`, callback);
  }

  // 删除定时任务
  delete() {
    if (schedule.scheduledJobs[this.unit_name]) {
      schedule.scheduledJobs[this.unit_name].cancel();
      return true
    }
    return false
  }

  // 找到一个定时任务
  findOne(name) {
    if (schedule.scheduledJobs[name]) {
      return schedule.scheduledJobs[name]
    } else {
      throw new Error("未找到任务名")
    }
  }

  // 查看所有的定时任务
  findAll() {
    return schedule.scheduledJobs
  }
}
Copier après la connexion

Voici un exemple d'intervalle de tâche planifiée lors d'un appel

// 定时任务
new Util.Interval({
  unit_name: '自动分发任务 0 0 12 * * *',
  maintain_time: '0 0 12 * * *',
  last_alarm: '自动分发任务 0 0 12 * * *'
}).create(async () => {
  // 写入你自己想在定时任务触发的时候,想要执行的函数
})
Copier après la connexion
Pour plus de connaissances sur les nœuds, veuillez visiter : 🎜tutoriel Nodejs🎜 ! ! 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:juejin.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal