2016-04-19 6 views
0

Zum Beispiel in PHP könnten wir in einer Schleife eine Sleep-Funktion für 5 Minuten setzen, wo die Ausführung als Schleife zurückhalten konnte, wo wir neue holt aus der Datenbank oder anderen Instanzen führen bekommen könnten, wie kann dies als die einzige Möglichkeit, in JavaScript geschehen ist Timeout setzen und die gleiche Funktion darin aufrufen, Danke.Was ist die beste Praxis für PHP-Schlaf-Funktion in Javascript?

+0

Die Frage ist, dies wird die Schleife als Schlaf nicht Pause() Funktion tut mir korrigieren, wenn ich falsch bin – jaylab

+0

Sie nicht JS pausieren kann, weil sie Single-Threaded ist; Dies würde möglicherweise Ihre gesamte Seite einfrieren. Sie können einen Teil des Codes nur in eine Funktion auslagern und JS mitteilen: Rufen Sie diese Funktion in x ms auf, wie "ruf mich zurück": [setTimeout] (https://developer.mozilla.org/en/docs/Web/API/WindowTimers/setTimeout). Und Sie können JS sagen: Ich brauche diese Funktion alle 5 Minuten ausgeführt (es sei denn, ich Ihnen sagen, anders) das ist [setInterval] (https://developer.mozilla.org/en/docs/Web/API/WindowTimers/setInterval) – Thomas

+0

Die eigentliche Frage sollte sein, warum Sie diese Funktionalität überhaupt brauchen? Anscheinend lösen Sie ein Problem und aus irgendeinem Grund scheint es, dass ein 'sleep()' Ihnen helfen würde (Anmerkung: Schlaf in PHP ist extrem schlecht, weil es CPU-Zyklen verschwendet, es ist ineffizient). – Mjh

Antwort

0

Wie bereits oben in den Kommentaren aus, JavaScript ist single-threaded und so ist dies nicht möglich, es sei denn, Sie den Code wickeln Sie in einem eigenen Funktion nach der Verzögerung ausgeführt werden sollen.

Sie jedoch eine Art von Fortschritt Speichersystem machen könnte, wodurch Sie verfolgen, was die Bühne Sie verschiedene Teile des Codes wollen auf den Pausenzyklus auszuführen basiert, zum Beispiel:

var stage = 0; 

setInterval(function() { 
    executeStage(++stage); // Iterate stage 
}, 300000); // 5 mins 

var executeStage = function(stageToExecute) { 

    // Put any code you want to execute at EVERY stage here 
    console.log('this code will execute no matter what stage is set'); 

    // Now execute code specific to just this stage 
    switch (stageToExecute) { 
    case 1: 
     // Put stage 1 code here 
     console.log('Stage 1 executes here'); 
     break; 

    case 2: 
     // Put stage 2 code here 
     console.log('Stage 2 executes here'); 
     break; 

    // And so on 
    } 
} 

oben Das ist nur ein Idee, es hängt wirklich von Ihrem Anwendungsfall ab, der in Ihrer Frage nicht sehr deutlich erklärt wurde. Sie sollten auch bedenken, dass die erste Stufe nicht ausgeführt werden, bis 5 Minuten mit setInterval bestanden haben, wenn Sie also eine Stufe ausgeführt werden soll, dann 5 Minuten warten, müssen Sie einen Anruf an executeStage(++stage) außerhalb des setInterval Anruf hinzufügen .

Verwandte Themen