3

我需要每 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();
  })
}
4

1 回答 1

1

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

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();
  })
}
于 2018-12-26T09:34:05.287 回答