2016-11-14 4 views
-1

У меня есть программа js узла, которую я хочу запускать каждые x секунд. Это значение будет указано пользователем и сохранено в mongoDB.Разрешить изменение setInterval time

Теперь мне нужно убедиться, что моя программа сначала считывает значение Interval из dbs, а затем запускает программу в соответствии с этим значением. Кроме того, если пользователь меняет интервал, программа должна отражать это тоже без перезапуска приложения - возможно ли это?

Чтобы сохранить его Короче говоря, это мой 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

Related: [Изменение интервала 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