间隔时间更新后重新启动程序

时间:2016-11-29 17:13:31

标签: node.js setinterval

我有一个节点js程序,需要运行每个' x'秒数。我简化了我的程序,以便查看我的问题是否有解决方案。

这是我的计划:

defaultPoll.find(function (err, interval) {
  if (err) return console.error(err);
  console.log(interval);
})

setInterval(function(interval) {
    grading();
}, interval, true);

function grading(){
    console.log('in here')
}

运行此程序时发生的第一件事是,我在数据库中找到了间隔值(用户可以通过API访问),并运行setInterval函数,打印出来&# 39;在这里'每5秒钟。所以15秒后我的控制台看起来像这样:

in here
in here
in here

现在,挑战 - 我希望用户能够修改间隔时间 - 并且已经允许用于此的API。但是,当用户更新间隔值时,程序仍使用旧数据库值运行,就像没有更新setInterval方法一样。

有办法做到这一点吗?

目的:

  1. 用户将间隔时间设置为5000毫秒
  2. SetInterval每5秒运行grading()
  3. - 用户更新的间隔时间为10000毫秒
  4. SetInterval更新更改,现在每10秒运行grading()
  5. ....等等
  6. 谢谢!

1 个答案:

答案 0 :(得分:0)

您需要的是能够异步循环以在更新间隔时从API获取间隔。你可以做的是使用async.whilst而不是SetInterval,你可以调用setTimeout,只需在达到超时后轮询API。在此示例中,您不必重新启动该程序。

试试这个:

var CANCEL = false;
var async = require('async');

function grading(){
    console.log('in here');
}

async.whilst(function () {
  return CANCEL === false;
},
function (next) {
    defaultPoll.find(function (err, interval) {
        if (err) {
            return next(err);
        }
        setTimeout(function () {
            grading();
            next();
        }, interval);
    });
},
function (err) {
    // cancelled here
    console.error(err);
});