我将一天分为6个部分,一天的每个部分都有自己的间隔。我的函数必须在此间隔内运行。 例如,12:00 pm-15:00 pm的间隔是10分钟,因此必须每10分钟调用一次函数,但是15:00 pm-20:00 pm的间隔是2分钟,因此必须将15:01 pm的间隔从10min更改为2min。 / p>
需要建议如何构建这种计时器。
我可以从mongoDB或本地json文件获取间隔。
我想我必须检查现在是几点,并获取该时间的间隔(从mongoDB或json文件),然后将其传递给setInterval()
或Cron作业调度程序。
尝试过这种方式,但是每次im经过新的间隔时,最后一个间隔仍然有效:如果间隔为2分钟,并且im将其更改为5分钟,则会调用两次函数:setInterval()
和{中的每2分钟和每5分钟{3}}
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())
});
}
谢谢
答案 0 :(得分:0)
你能做这样的事情吗?这将使用EventEmitter模型并根据自定义时间间隔触发事件。
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);
答案 1 :(得分:0)
我认为它仍在触发,因为没有clearInterval
告诉它停止。