调用函数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的动态时间间隔的主要内容,如果未能解决你的问题,请参考以下文章

在 Node.js 与 Cron 作业中设置间隔?

Node.js JavaScript 片段中的跳过代码

从 node.js 调用 C 代码

从模块中调用 Node.js 模块函数

Firebase:如何调用 https.onCall 函数 node.js?

回调函数的使用场合