2016-11-14 107 views
-1

我有一个节点js程序,我想运行每x秒钟。该值将由用户指定,并保存在mongoDB中。允许修改setInterval时间

现在我需要确保我的程序首先从dbs中读取Interval值,然后根据此值运行程序。此外,如果用户更改了时间间隔,程序也需要反映这一点,而无需重新启动应用程序 - 这可能吗?

为了简化,这是我的MongoDB值:

{ "_id" : ObjectId("398eb"), "__v" : 0, "milliseconds" : 16000 } 

所以我想我的程序先读这个值,然后运行基于毫秒值的程序。

var abc = function() { 
mongoose.connect('mongodb://localhost/mas'); 
defaultPoll.find(function (err, interval) { 
    if (err) {return console.error(err);} 
    else { 
    var intervalVal = JSON.stringify(interval[0].milliseconds, null, 2); 
    console.log(intervalVal); 
    time(intervalVal); 
    } 
}) 
mongoose.connection.close(); 
} 

var time = function(sec){ 
setInterval(function() { 
    // all my other functions 
    console.log('hello') 
}, sec, true); 
} 

abc(); 

然而,与此有关的问题是,每隔16秒,“你好”打印到控制台(预计),但是当我在数据库中更改间隔值,我需要重新启动该程序需要提取的变化(这也是当前代码所期望的)。

那么,我怎么能实现我的程序运行每x秒,这是用户指定的?也许setInterval不是正确的思维方式?

任何帮助或提示,将不胜感激。

+0

相关:改变的setInterval的时间间隔,而它的运行(HTTP:/ /stackoverflow.com/questions/1280263/changing-the-interval-of-setinterval-while-its-running) –

回答

-1

你可以使用setTimeout代替setInterval,这样每次都可以指定延迟:

var index = 0; 
 
var $time = $('#time'); 
 

 
function nextStep(time) { 
 
    setTimeout(function() { 
 
     index++; 
 
     nextStep($time.val()); 
 
     console.log(index); 
 
    }, time); 
 
} 
 

 
nextStep(500);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<input type="text" id="time" value="500"><label for="time">Time</label>

+0

如何在此解决方案中使用Node js和mongoDB? – deeveeABC