2016-08-07 8 views
1

Ich habe ein Problem mit setTimeout Funktion in Javascript, mein Ziel ist es, Timeout für jede Insert-Anweisung zu geben, nach erreichen gegeben Maxrecord, wird es für 2 Stunden pausieren, dann weiter die Insert-Anweisung.Javascript SetTimeout geben ein weiteres Timeout

Im Moment mache ich nur eine Arbeit für die erste Bedingung, die Verzögerung für jeden Einsatz gegeben wird. Aber ich weiß nicht, wie man 2 Stunden Verzögerung gibt, bevor man fortsetzt, einzufügen.

mein Code wie folgt,

var ids = $("#listId").val().split('\n'); 

      var index = 1; 
      for(var i = 0; i < ids.length; i++) { 
       (function(i){ 
        setTimeout(function(){ 
         if (index <= interval) { 
          console.log("INDEX : " + index + " INTERVAL : " + interval); 
         } else { 
          console.log("SHOULD BREAK FOR 2 HOURS (NOTHING TODO HERE, JUST DELAY) THEN CONTINUE FROM LAST IDS"); 
         } 
         index++; 
        }, 1000 * i); 
       }(i)); 
      } 

wie Sie sehen können, ich brauche < = Intervall nach Index 2 Stunden Verspätung zu geben und dann wieder weiter mit dem letzten i.

Schätzen Sie Ihre Hilfe.

+0

2 Stunden? Wie ... in Echtzeit 2 Stunden oder der Besucher sollte die Seite für mehr als zwei Stunden am Leben halten? –

+0

ja @ RokoC.Buljan, ich mache diese apps für meinen Freund, für den einzelnen Zweck, mein Freund muss Verzögerung für jeden Einsatz geben, nachdem es Maxinterval erreichen sollte für 2 Stunden brechen und dann weiter einfügen. Ich denke, sollte die Seite am Leben erhalten. –

+0

Ich ermutige Sie, diese Logik auf der Serverseite statt Client-Seite zu implementieren. – bhspencer

Antwort

1

Sie setzen alle Ihre Timeouts auf einmal, zu Beginn, mit vordefinierten Zeiträumen.

Sie können nicht (leicht) gehen zu ändern, wie diese Zeiten basierend auf einer beliebigen Bedingung eingestellt werden Statt

(diese 2 Stunden Verzögerung Sie sprechen), sollten Sie so etwas wie tun:

function nextRow() { 
    // handle a single row 
    i++; 
    if(i < ids.length) setTimeout(nextRow,delay); 
     // where delay is either 1000 or 7200000 as needed 
} 
nextRow(); // start the loop 
+0

danke für Hilfe @Niet, aber wie wäre es mit der zweiten Bedingung, wenn ich maxInterval erreicht habe, sollte es für zwei Stunden brechen und dann weiter von den letzten IDs eingefügt. für Verzögerung 2 Stunden, es hat nichts eingefügt, nur Timeout. –