首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >编辑使用node-cron创建的任务

编辑使用node-cron创建的任务
EN

Stack Overflow用户
提问于 2018-07-19 19:16:42
回答 2查看 1.9K关注 0票数 5

尝试使用node-cron 'https://github.com/merencia/node-cron‘按计划运行任务。

任务创建和启动:

代码语言:javascript
复制
var cron = require('node-cron'),
task = cron.schedule('* * * * * *', function () {
    console.log('task running...',JSON.stringify(task));
    }, false);
task.start();

要停止任务,请执行以下操作:

代码语言:javascript
复制
task.stop();

要销毁任务,请执行以下操作:

代码语言:javascript
复制
task.destroy();

当在创建任务的范围内执行任务时,代码可以正常工作。但根据需求,我如何才能稍后从不同的函数访问“任务”。是否可以将任务存储在后端,以便稍后对其执行“stop()”或“destroy()”函数。如果不能使用node-cron,还可以使用其他方法。使用node.js和mongoDb。

EN

回答 2

Stack Overflow用户

发布于 2020-09-16 08:23:58

我也面临着同样的问题。使用node-schedule解决了这个问题:

启动自定义作业:

代码语言:javascript
复制
  const campaignId = "MY_CUSTOM_ID"
  let job = schedule.scheduleJob(campaignId, '* * * * * *', function () {
    console.log('running campaign: ' + campaignId)
  })

停止自定义作业:

代码语言:javascript
复制
  const campaignId = "MY_CUSTOM_ID"
  let current_job = schedule.scheduledJobs[campaignId]
  current_job.cancel()
票数 5
EN

Stack Overflow用户

发布于 2018-07-19 22:38:58

不,不可能将这样的对象存储在数据存储中。您将需要一些其他系统来管理您的任务。

一个这样的系统可以是一个全局可用的管理器,您可以通过某个id注册任务,以便任何知道此id的人都可以访问该任务。然后可以将该id存储在数据库中。

非常简单的实现:

TaskManager.js

代码语言:javascript
复制
const tasks = [];

const add = (task) => {
  tasks.push(task);
  return tasks.length;
};

const get = (id) => tasks[id];

module.exports = {
  add,
  get,
};

模块1.js

代码语言:javascript
复制
const TaskManager = require('TaskManager.js');

const task = cron.schedule( /* ... */ );
const id = TaskManager.add(task);
DB.store('task_id', id)

模块2.js

代码语言:javascript
复制
const TaskManager = require('TaskManager.js');

const id = DB.get('task_id');
const task = TaskManager.get(id);

另一种方法可以是TaskManager,它侦听事件或定期检查数据库中的值,并根据该值停止任务。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51421286

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档