为已经运行的cron-node作业重置计时器

时间:2018-12-26 08:50:37

标签: node.js cron scheduler node-cron

我需要每5分钟运行一个调度程序,该调度程序将执行几个http调用。 第一次之后,我只想在所有http调用完成后才启动下一个计时器。 我该怎么办?在“ node-cron”文档中找不到解决方案。 这就是我要尝试的方式。

const CronJob = require('cron').CronJob;
const axios = require("axios");

const job = new CronJob('* */5 * * * *', function() {
    console.log(new Date());
  calls();
},null,true);


function calls(){
  job.stop();
  axios.get("url").then((res)=>{
    console.log(res.data);
    job.start();
  })
}

1 个答案:

答案 0 :(得分:0)

可能axios不会根据您的需要提供任何特定的api,但是您可以创建一个标志,该标志在使axios.get()之前打开并在获取响应时重置。在cron作业中如果标记为on,则跳过您的任务,否则调用(),示例:

const CronJob = require('cron').CronJob;
const axios = require("axios");
var isRunning = false;
const job = new CronJob('* */5 * * * *', function() {
  console.log(new Date());
  if(!isRunning) calls();
},null,true);


function calls(){
  job.stop();
  isRunning = true;
  axios.get("url").then((res)=>{
    isRunning = false
    console.log(res.data);
    job.start();
  })
}