2016-11-14 148 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