我有一个节点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方法一样。
有办法做到这一点吗?
目的:
SetInterval
每5秒运行grading()
SetInterval
更新更改,现在每10秒运行grading()
谢谢!
答案 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);
});