设置后取消节点调度事件

Posted

技术标签:

【中文标题】设置后取消节点调度事件【英文标题】:Cancel node-schedule event after it has been set 【发布时间】:2016-01-11 19:56:12 【问题描述】:

我打算使用node-schedule设置预约提醒推送通知如下:

var schedule = require('node-schedule');
var date = req.body.date;   // Date for reminder from client request 
var j = schedule.scheduleJob(date, function()
    // Send push notification
);

现在我知道你可以通过调用 cancel() 来取消事件:

j.cancel()

但是,如果来自客户端的用户决定将约会更改为不同的日期,我如何参考该特定作业以取消?

提前感谢您的帮助!

【问题讨论】:

【参考方案1】:

为了检索特定作业,您可以使用唯一名称创建它,并且以后可以通过该唯一名称检索它:

var j = schedule.scheduleJob(unique_name, date, function() 
);
// later on
var my_job = schedule.scheduledJobs[unique_name];
my_job.cancel();

【讨论】:

这很好用。谢谢。我试图序列化作业对象,将其写入我的数据库,检索它,反序列化它并调用 .cancel()。你可以想象我的痛苦。 \0/ 太棒了! 2 年后也很有帮助。非常感谢。 @ShahNewazKhan 它似乎不适用于节点调度版本 1.3.2。如果有 unique_name 参数,则根本不会在指定日期调用函数。它适用于哪个版本?我也找不到唯一名称作为文档中的第一个参数。【参考方案2】:
var randf = require('randomstring');    
    var jobId = randf.generate(10); //randomsrting
    var at = new Date();
    var time = at.setSeconds(at.getSeconds() + Number(5))  //after 5 second     
    schedule.scheduleJob(jobId, new Date(time),function()
         schedule.cancelJob(jobId);
         console.log('hi--viral');
     );

【讨论】:

以上是关于设置后取消节点调度事件的主要内容,如果未能解决你的问题,请参考以下文章

如何扩展 Quartz 调度器?

k8s 让master主节点也参与调度

Python sched替代取消所有事件

调度器(scheduler)

k8s不常用设置-禁止master调度

在 VueJS 中调度后如何发出事件?