Javascript 是否有一种方法可以在cron中立即启动作业,然后在执行完成后停止作业?

Javascript 是否有一种方法可以在cron中立即启动作业,然后在执行完成后停止作业?,javascript,node.js,node-cron,Javascript,Node.js,Node Cron,我刚开始使用cron,但我找不到一种方法来安排一次性作业。 我所拥有的是为我工作,但我想知道是否有更好的方法来实现它 下面的代码创建一个作业,并在控制台中打印它是创建的。我每1秒设置一次计时器,但就在下面,我用1.5秒来停止工作 const express = require('express'); const cron = require('node-cron'); const router = express.Router(); const sleep = ms => new Pro

我刚开始使用cron,但我找不到一种方法来安排一次性作业。 我所拥有的是为我工作,但我想知道是否有更好的方法来实现它

下面的代码创建一个作业,并在控制台中打印它是创建的。我每1秒设置一次计时器,但就在下面,我用1.5秒来停止工作

const express = require('express');
const cron = require('node-cron');
const router = express.Router();

const sleep = ms => new Promise(resolve => setTimeout(resolve, ms));

// Schedule a job on GET
router.get('/', (req, res, next) => {
  const job = cron.schedule(`*/1 * * * * *`, () => {
    console.log('job created');
  });
  sleep(1500).then(() => {
    job.stop();
  })
  
  return res.status(200).json({ message: 'scheduled'});
});

您可以构建cron表达式,如下所示。“0 0 7 8 9?2020”(每周一个月的第二天的秒分钟小时数),此操作将只运行一次。您需要根据希望作业运行的第一天/时间构建此表达式。如果需要立即运行,可以基于当前时间+几秒缓冲区构建cron表达式

您可以构建cron表达式,如下所示。“0 0 7 8 9?2020”(每周一个月的第二天的秒分钟小时数),此操作将只运行一次。您需要根据希望作业运行的第一天/时间构建此表达式。如果需要立即运行,可以根据当前时间+几秒缓冲区构建cron表达式

,正如snp所建议的,我必须创建一个包含最近日期和几秒的cron表达式。但是,我也意识到包
节点cron
cron
完全不同,即使它们重定向到相同的位置

我是这样解决的:

const express = require('express');
const cron = require('cron'); // <- change of package
const router = express.Router();
const cronJob = cron.CronJob; // <- get the cron job from the package

const getDateAsCronExpression = () => { ... }

// Schedule a job on GET
router.get('/', (req, res, next) => {
  const cronExpression = getDateAsCronExpression();
  var job = new cronJob(cronExpression, () => {
    console.log('job executed!');
  }, null, true, 'your_time_zone_here');
  
  return res.status(200).json({ message: 'scheduled'});
});

const express=require('express');
const cron=require('cron');//{
const cronExpression=getDateAsCronExpression();
var job=新的cronJob(cronExpression,()=>{
log('job executed!');
},null,true,“您的时区(此处)”;
返回res.status(200).json({message:'scheduled'});
});
正如snp所建议的,我必须创建一个带有最近日期加上几秒钟的cron表达式。但是,我也意识到包
节点cron
cron
完全不同,即使它们重定向到相同的位置

我是这样解决的:

const express = require('express');
const cron = require('cron'); // <- change of package
const router = express.Router();
const cronJob = cron.CronJob; // <- get the cron job from the package

const getDateAsCronExpression = () => { ... }

// Schedule a job on GET
router.get('/', (req, res, next) => {
  const cronExpression = getDateAsCronExpression();
  var job = new cronJob(cronExpression, () => {
    console.log('job executed!');
  }, null, true, 'your_time_zone_here');
  
  return res.status(200).json({ message: 'scheduled'});
});

const express=require('express');
const cron=require('cron');//{
const cronExpression=getDateAsCronExpression();
var job=新的cronJob(cronExpression,()=>{
log('job executed!');
},null,true,“您的时区(此处)”;
返回res.status(200).json({message:'scheduled'});
});

非常感谢,它确实有效,但我也使用了另一个仍然相同的软件包(?非常感谢,它确实有效,但我也使用了另一个仍然相同的软件包(?)?