ホームページ >ウェブフロントエンド >jsチュートリアル >ノード スケジュールを使用してノード プロジェクトにスケジュールされたタスクを作成する方法

ノード スケジュールを使用してノード プロジェクトにスケジュールされたタスクを作成する方法

青灯夜游
青灯夜游転載
2021-11-17 18:33:163473ブラウズ

nodeプロジェクト内にスケジュールされたタスクを作成するにはどうすればよいですか?次の記事では、ノード スケジュールを使用してノード プロジェクトでスケジュールされたタスク スクリプトを開発する方法を紹介します。

ノード スケジュールを使用してノード プロジェクトにスケジュールされたタスクを作成する方法

nodejs のバックエンドには、バックアップ、スケジュールされた電子メール送信、決済、その他の操作などのスケジュールされたタスクを処理する必要があるため、npm ノードスケジュールが使用されています。スケジュールされたタスク スクリプトの開発にご協力ください。

npm install node-schedule

ノード スケジュール内のスケジュールされた各タスクは、Job オブジェクトによって表されます。手動で作成し、schedule() メソッドを実行してタスクを適用するか、次のように scheduleJob() を使用します。

Job オブジェクトは `EventEmitter で、各実行後に次のイベントを発行します:

  • runイベント。
  • scheduledプランが実行されるたびに発生するイベント。
  • acanceled: キャンセルされたイベントが実行前に呼び出される場合。
  • スケジュールされたジョブ呼び出しがトリガーされるか、終了イベントが Promise を拒否すると、error がスローされます。

(scheduled イベントと canceled イベントは両方とも、JavaScript 日付オブジェクトをパラメーターとして受け取ります)。 タスクは初めてすぐに実行されるため、scheduleJob() メソッドを使用してタスクを作成すると、最初の scheduled イベント トリガーを見逃すことになりますが、実行できることに注意してください。手動で通話を問い合わせます。

#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'

これは、スケジュールされたタスクを追加、削除、変更、確認するためのノード スケジュール カプセル化クラスの私の個人的な使用法です
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
  }
}

呼び出し時のスケジュールされたタスクの間隔インスタンスです。
// 定时任务
new Util.Interval({
  unit_name: '自动分发任务 0 0 12 * * *',
  maintain_time: '0 0 12 * * *',
  last_alarm: '自动分发任务 0 0 12 * * *'
}).create(async () => {
  // 写入你自己想在定时任务触发的时候,想要执行的函数
})

ノード関連の詳細については、

nodejs チュートリアル を参照してください。 !

以上がノード スケジュールを使用してノード プロジェクトにスケジュールされたタスクを作成する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はjuejin.cnで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。