Esiste una funzione di javery o javery equivalente?

Voglio qualcosa di simile in javascript.

for (i = 0; i < 10; i++) { alert(i); // now sleep 1 sec sleep(1000); } 

c’è un Javascript o Jquery integrato per questo?

Grazie!

Non c’è niente di simile, direttamente. Dovresti dire a javascript di svegliare “qualcosa” dopo un po ‘di tempo usando setTimeout .

Questo ‘qualcosa’ sarebbe il codice che pianifichi di eseguire dopo il sonno, ovviamente.

Da un esempio che ho trovato su internet :

 function dothingswithsleep( part ) { if( part == 0 ) { alert( "before sleep" ); setTimeout( function() { dothingswithsleep( 1 ); }, 1000 ); } else if( part == 1 ) { alert( "after sleep" ); } } 

Ma questo è un design fragile. È meglio riconsiderare la tua logica di business per fare davvero qualcosa dopo un secondo: chiama una funzione diversa invece di utilizzare queste variabili helper inventate.

uso

setTimeout

metodo

Prima domanda, perché vuoi dormire in un ciclo? Se questo è necessario, forse dovrebbe essere messo in atto un sistema di eventi. Io stesso ho provato la tattica del sonno molte volte per la programmazione javascript con sottotitoli e ho trovato che non funziona bene. Il modo migliore per fare multi-threading in javascript è utilizzare un sistema di eventi come quello fornito da YUI o quasi da qualsiasi altro framework. Chiedi al tuo ascoltatore di iscriversi a questo evento e fare qualcosa ogni volta che si verifica. In questi framework di eventi hai il pieno controllo di quando il tuo evento personalizzato si triggers e quindi non è un grosso problema.

Ecco il link per la struttura dell’evento di YUI.

http://developer.yahoo.com/yui/examples/event/index.html

Ecco come potrebbe essere codificato usando YUI

 var myEvent = new YAHOO.util.CustomEvent('fooEvent'); // subscribe a function to be called (first param) inside the scope of an object // (second param). myEvent.subscribe(function() {alert(this.count++);},{count:0},true); setTimeout('myEvent.fire()',1000); 

Questo modo di farlo è molto più pulito e più compatto. O se non vuoi usare un framework di eventi, prova questo

 var myObj = { count:0, doSomething:function(){alert(this.count++);} loopFunc:function(){ this.doSomething(); setTimeout('myObj.loopFunc()',1000); } } 

Questo offre quello che ti serve, e il suo è più compatto.

Ma se DAVVERO dovete avere una funzione sleep nel vostro codice, allora raccomanderei di fare una chiamata Ajax sincrona a un semplice script serveride. Quindi puoi utilizzare il codice sul server per dormire, se lo desideri. Di seguito è riportato un collegamento a una domanda pubblicata qui che mostra come effettuare una chiamata sincrona.

Come posso ottenere jQuery per eseguire una richiesta Ajax sincrona, piuttosto che asincrona?

Ma consiglio vivamente di andare per il modo setTimeout. Molto più pulito, e probabilmente non vuoi effettuare chiamate sul server se puoi evitarlo.

Ho cercato / googled alcune pagine web su javascript sleep / wait … e non c’è risposta se vuoi javascript su “RUN, DELAY, RUN” … quello che la maggior parte delle persone ha ottenuto è “RUN, RUN (inutile roba), RUN “o” RUN, RUN + delayed RUN “….

Quindi ho mangiato degli hamburger e ho pensato ::: qui c’è una soluzione che funziona … ma devi tagliare i tuoi codici di marcia … :::

//………………………………….. //Esempio 1:

   
DISPLAY

// ……………………………… // esempio2:

   
DISPLAY

Ho visto questo commento “Ho provato a utilizzare setTimeout, ma NON ho bisogno di una funzione di continuazione” e ho pensato, sì, lo sai. Ciò di cui non hai bisogno è un ciclo. Hai bisogno di una funzione ricorsiva.

QUESTO

 for (i = 0; i < 10; i++) { alert(i); // now sleep 1 sec sleep(1000); } 

TRADUCE QUESTO

 function recursive( i, max ) { if ( i > max ) return; alert( i ); i = i + 1; setTimeout( function(){ recursive(i, max); }, 1000 ); } recursive(1, 10); 

Esempio: http://jsfiddle.net/q76Qa/

Bene, se hai PHP installato sul server web, potresti usare $.load o simili per chiamare un file PHP che ha solo sleep(int) in esso …

 function sleep(delay) { var start = new Date().getTime(); while (new Date().getTime() < start + delay); }