Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    Javascript: interrompere per x secondi un ciclo

    Salve, come posso creare un tempo di SLEEP di un ciclo FOR per x secondi o millisecondi dopo del quale il ciclo riprenda?

    Grazie

  2. #2
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Prova con : 3000 = 3 secondi.

    setTimeout(function(){}, 3000);
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  3. #3
    Ciao badaze, grazie per la risposta.
    Certo che con setTimeout si ottiene qualcosa di simile a quanto cerco, ma in realtà speravo in qualcosa tipo sleep(sec) dove si potesse indicare un valore per il sec che avrebbe comportato un congelamento della funzione che avrebbe successivamente ripreso dopo il trascorrere dei secondi o millisecondi impostati.
    Comunque grazie lostesso.

  4. #4
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Ti crei una funzione che si chiama Sleep ed è fatta.
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  5. #5
    setTimeout() non funziona in maniera sincrona, messo dentro un ciclo for non sortirebbe nessun effetto.
    Per usare setTimeout, dovrebbe sostituire il ciclo for con una funzione ricorsiva.

    Uno pseudo sleep si potrebbe ottenere usando "async" e "await", novità js del 2017.

  6. #6
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    @lucavizzi. Verissimo !!! Lo sapevo ma non ci ho proprio pensato !

    Comunque si puo' fare usando le date. Ma non vedo a cosa possa servire visto che la pagina non si aggiorna.

    codice HTML:
    <script>
    function sleep(seconds) {
     
     var maxDate = new Date();
     maxDate.setSeconds(maxDate.getSeconds() + seconds);
     var curDate = new Date();
     while (maxDate.toISOString() > new Date().toISOString());
    }
    
    </script>
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  7. #7
    Una implementazione usando le promises:

    codice:
    <!doctype html>
    <html>
    <head>
    <meta charset="utf-8">
    <title>Javascript sleep using promises</title>
    <script type="text/javascript">
    function sleep(ms) {
      return new Promise(resolve=>setTimeout(resolve,ms));
    }
    async function demo() {
    	for(var i=0; i<3; i++){
    		alert(i+' of 2');
    		await sleep(5000)
    	}
    }
    demo();
    </script>
    </head>
    <body>
    </body>
    </html>

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.