Rumah  >  Artikel  >  hujung hadapan web  >  Cara menggunakan Jadual Nod untuk mencipta tugas berjadual dalam projek nod

Cara menggunakan Jadual Nod untuk mencipta tugas berjadual dalam projek nod

青灯夜游
青灯夜游ke hadapan
2021-11-17 18:33:163430semak imbas

Bagaimana untuk mencipta tugas berjadual dalam projek

nod? Artikel berikut akan memperkenalkan kepada anda cara menggunakan Jadual Nod untuk membangunkan skrip tugas berjadual dalam projek nod Saya harap ia akan membantu anda!

Cara menggunakan Jadual Nod untuk mencipta tugas berjadual dalam projek nod

Halaman belakang nodej juga perlu memproses tugasan berjadual, seperti sandaran, penghantaran e-mel berjadual, penyelesaian dan operasi lain, jadi Jadual Nod npm digunakan Bantu kami membangunkan skrip tugas berjadual.

npm install node-schedule

Setiap tugas yang dijadualkan dalam Jadual Nod diwakili oleh objek Job. Ini boleh dibuat secara manual dan kemudian laksanakan kaedah schedule() untuk menggunakan tugasan, atau gunakan scheduleJob() seperti berikut. Objek

Job ialah `EventEmitter dan memancarkan peristiwa berikut:

  • run selepas setiap pelaksanaan.
  • scheduledAcara setiap kali rancangan berjalan.
  • A canceled acara yang dibatalkan apabila dipanggil sebelum ia dilaksanakan.
  • A error dilemparkan apabila panggilan kerja berjadual dicetuskan atau acara keluar menolak Promise.

(Kedua-dua peristiwa scheduled dan canceled menerima objek tarikh JavaScript sebagai parameter). Ambil perhatian bahawa tugasan dilaksanakan serta-merta buat kali pertama, jadi jika anda menggunakan kaedah scheduleJob() untuk membuat tugasan, anda akan terlepas pencetusan acara scheduled pertama, tetapi anda boleh menanyakan panggilan secara manual.

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'

Berikut ialah penggunaan peribadi kelas enkapsulasi jadual nod untuk menggunakan tambah, padam, ubah suai dan semak tugasan yang dijadualkan

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
  }
}

Berikut ialah contoh Selang tugas yang dijadualkan semasa memanggil

// 定时任务
new Util.Interval({
  unit_name: '自动分发任务 0 0 12 * * *',
  maintain_time: '0 0 12 * * *',
  last_alarm: '自动分发任务 0 0 12 * * *'
}).create(async () => {
  // 写入你自己想在定时任务触发的时候,想要执行的函数
})

Untuk lebih banyak pengetahuan berkaitan nod, sila lawati: tutorial nodejs ! !

Atas ialah kandungan terperinci Cara menggunakan Jadual Nod untuk mencipta tugas berjadual dalam projek nod. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:juejin.cn. Jika ada pelanggaran, sila hubungi admin@php.cn Padam