gpt4 book ai didi

javascript - Node-cron:WAITING作业完成执行下一个

转载 作者:行者123 更新时间:2023-12-05 03:58:46 24 4
gpt4 key购买 nike

我正在使用包 "cron": "^1.7.1"

我想完成一项可能需要比计划的 cron-job 更长的时间的任务。

在下面找到我的最小可行示例:

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

console.log('Before job instantiation');
const job3 = new CronJob(
'*/2 * * * * *', async () => {
if (job3.taskRunning) {
return
}

try {
//run longer task here
await setTimeout(() => {
const d = new Date();
console.log('JOB 3 - ', d);
job3.taskRunning = true
}, 6000);
} catch (err) {
console.log(err);
}
job3.taskRunning = false
}
)
console.log('After job instantiation');
job3.start();

如您所见,我的作业每 2 秒 运行一次并打印:

JOB 3 -  2019-09-01T17:06:22.006Z
JOB 3 - 2019-09-01T17:06:24.001Z
JOB 3 - 2019-09-01T17:06:26.002Z
JOB 3 - 2019-09-01T17:06:28.001Z

但是,我只想每 6 秒 获取消息,因为任务需要运行 6 秒

对我做错了什么有什么建议吗?

最佳答案

正确初始化运行标识符可以解决问题。创建初始化为表示不运行的全局变量 taskRunning。然后在调用长时间运行的任务之前使其处于运行状态。在长时间运行的任务再次完成之前将其设置为不运行。添加了额外的控制台日志,以防下一次触发时间发生在长时间运行的任务完成并返回而不执行它之前。

const CronJob = require('cron').CronJob;
taskRunning=false
console.log('Before job instantiation');
const job3 = new CronJob(
'*/2 * * * * *', async () => {
if (taskRunning) {
console.log('returning')
return
}
taskRunning=true
try {
//run longer task here
await setTimeout(() => {
const d = new Date();
console.log('JOB 3 - ', d);
taskRunning = false
}, 6000);
} catch (err) {
console.log(err);
}

}
)
console.log('After job instantiation');
job3.start();

关于javascript - Node-cron:WAITING作业完成执行下一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57748085/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com