2016-11-14 2 views
-1

Ich habe ein Knoten js Programm, das ich alle x Sekunden ausführen möchte. Dieser Wert wird vom Benutzer festgelegt und in mongoDB gespeichert.Lassen Sie die setInterval Zeit ändern

Jetzt muss ich sicherstellen, dass mein Programm zuerst den Intervallwert von den DBS liest, und dann das Programm entsprechend diesem Wert ausführt. Wenn der Benutzer das Intervall ändert, muss das Programm dies auch ohne Neustart der Anwendung widerspiegeln - ist das möglich?

es kurz zu halten, das ist mein mongoDB Wert:

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

Deshalb möchte ich mein Programm zuerst diesen Wert lesen, und führen Sie das Programm Wert basierend auf der Millisekunden.

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(); 

jedoch das Problem dabei ist, dass alle 16 Sekunden, ‚hallo‘ auf die Konsole ausgegeben werden (was zu erwarten ist), aber, wenn ich den Intervallwert in der db ändern muß ich das Programm neu zu starten, für die abzuholenden Änderungen (was auch mit dem aktuellen Code erwartet wird).

Also, wie kann ich erreichen, dass mein Programm läuft alle x Anzahl von Sekunden, die vom Benutzer angegeben ist? Vielleicht setInterval ist nicht die richtige Art zu denken?

Jede Hilfe oder Tipps wären willkommen.

+0

Verwandte: [Ändern des Intervalls von SetInterval, während es läuft] (http://stackoverflow.com/questions/1280263/changing-the-interval-of-setinterval-while-its-running) –

Antwort

-1

könnten Sie setTimeout anstelle von setInterval, dass die Art und Weise Sie die Verzögerung jedes Mal angeben:

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

Wie verwende ich Knoten js und mongoDB in dieser Lösung? – deeveeABC

Verwandte Themen