调用函数node.js的动态时间间隔

问题描述 投票:0回答:2

我把一天分为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())
    });
}

谢谢

node.js date cron setinterval scheduler
2个回答
0
投票

你能做这样的事吗?这使用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);

0
投票

我认为它还在解雇,因为没有clearInterval告诉它要停止。

© www.soinside.com 2019 - 2024. All rights reserved.