调用函数node.js的动态时间间隔
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了调用函数node.js的动态时间间隔相关的知识,希望对你有一定的参考价值。
我把一天分为6个部分,每天的每个部分都有自己的间隔。我的函数必须以此间隔运行。例如12:00 pm - 15:00 pm间隔是10分钟,所以功能必须每10分钟调用一次,但是15:00 pm - 20:00 pm间隔是2分钟所以从15:01 pm间隔必须从10min改为2min。
需要一个建议如何构建这种计时器。我可以从mongoDB或本地json文件获取间隔。我想我必须检查它是什么时间并获得一段时间(来自mongoDB或json文件),然后将其传递给setInterval()
或Cron作业调度程序。尝试这种方式,但每次通过新的间隔时,最后一个间隔仍在工作:如果间隔是2分钟并且我将其改为5分钟,则函数被调用两次:setInterval()
和Cron中的每2分钟和每5分钟
const test = (min) => {
console.log(min);
var intervale = setInterval(() => {
console.log('firing', min, new Date());
}, min);
}
const test = (min) => {
cron.schedule(`0 */${min} * * * *`, () => {
console.log('firing cron', new Date())
});
}
谢谢
答案
你能做这样的事吗?这使用EventEmitter模型并基于自定义Interval触发事件。
const eventemitter_cls = require("events").EventEmitter;
let eventemitter = new eventemitter_cls();
intervalName = "randomintervals"
let sumOfTwoNumbers = () => {
console.log(`hello world ${(new Date()).getMinutes()} ${(new Date()).getSeconds()}` );
// After you are done with your function, again you need to emit the event based on the time interval
setTimeout(() => {
eventemitter.emit(intervalName)
}, getTimeInterval());
}
let getTimeInterval = () => {
let currentTime = new Date();
// put your complicated interval schedule here
if(currentTime.getHours() >= 10 && currentTime.getHours() < 11){
return 5000;
}
else if (currentTime.getHours() > 12 && currentTime.getHours() < 15) {
return 2000;
}
else{
return 1000;
}
}
// give your function name here. the function will be called whenever someone emits intervalName
eventemitter.on(intervalName, sumOfTwoNumbers);
eventemitter.emit(intervalName);
另一答案
我认为它还在解雇,因为没有clearInterval
告诉它要停止。
以上是关于调用函数node.js的动态时间间隔的主要内容,如果未能解决你的问题,请参考以下文章