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

Cara menggunakan Jadual Nod untuk mencipta tugas berjadual dalam projek nod

青灯夜游
Lepaskan: 2021-11-17 19:29:17
ke hadapan
3495 orang telah melayarinya

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
Salin selepas log masuk

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'
Salin selepas log masuk

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
  }
}
Salin selepas log masuk

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 () => {
  // 写入你自己想在定时任务触发的时候,想要执行的函数
})
Salin selepas log masuk

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!

Label berkaitan:
sumber:juejin.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan