2009-09-19 27 views

Respuesta

158

La respuesta simple es que no hay tal función.

Lo más parecido que tenemos es:

var millisecondsToWait = 500; 
setTimeout(function() { 
    // Whatever you want to do after the wait 
}, millisecondsToWait); 

Tenga en cuenta que especialmente no quiere ocupada-espera (por ejemplo, en un bucle de giro), ya que el navegador es casi seguro que ejecuta su código JavaScript en un entorno de subproceso único.

Aquí hay un par de otras preguntas de modo que lidiar con hilos en JavaScript:

Y esta cuestión también puede ser útil:

+1

(+1) mire setTimeout() y setInterval() en javascript –

+7

Para promover buenas prácticas de codificación, podría ser mejor insertar un punto y coma después de "500" e inicializar "milisegundos para Esperar" en la muestra del código (por ej. con "var") (de esta forma, si alguien copia y pega la muestra, no terminará con un global implícito). –

+0

Buena captura, Steve. He editado mi respuesta para reflejar sus comentarios. –

2

Usted puede escribir un bucle de giro (un bucle que acaba de bucles por un largo período de tiempo a realizar algún tipo de cálculo para retrasar la función) o usar:

setTimeout("Func1()", 3000); 

Esto llamará 'Func1() 'después de 3 segundos.

Editar:

crédito va a los comentaristas, pero se puede pasar a funciones anónimas a setTimeout.

setTimeout(function() { 
    //Do some stuff here 
}, 3000); 

Esto es mucho más eficiente y no invoca la función de evaluación de JavaScript.

+0

Quiero que el hilo actual vaya para el estado de espera durante el número especificado de segundos – Niger

+0

Girar un bucle cau se Alta utilización de la CPU. – Niger

+0

Preferiría proporcionar la función directamente como argumento en lugar de citar el nombre de la función: setTimeout (function() {...}, 3000); – tvanfosson

7

No hay un equivalente directo, ya que pausaría una página web. Sin embargo hay una setTimeout(), por ejemplo:

function doSomething() { 
    thing = thing + 1; 
    setTimeout(doSomething, 500); 
} 

ejemplo de cierre (gracias Daniel):

function doSomething(val) { 
    thing = thing + 1; 
    setTimeout(function() { doSomething(val) }, 500); 
} 

El segundo argumento es milisegundos antes de disparar, puede utilizar esto para los acontecimientos del tiempo o esperar antes de realizar una operación .

Editar: Actualizado en función de los comentarios para un resultado más limpio.

0

O tal vez puede utilizar la función setInterval, para llamar a una función en particular, después de la cantidad especificada de milisegundos. Solo haz un google para el prototipo setInterval. No lo recuerdo bien.

39

Pruebe con este código. Espero que sea útil para ti

function sleep(seconds) 
{ 
    var e = new Date().getTime() + (seconds * 1000); 
    while (new Date().getTime() <= e) {} 
} 
+2

hace exactamente lo que se supone que – maazza

+49

Esto no pone el hilo a dormir, simplemente consume el hilo con un cálculo derrochador que es probable que bloquee la interfaz de usuario. No recomendado. – superdweebie

+11

Esa es una "espera ocupada" a.k.a "estás quemando el hilo" –

0

Esto finalmente me ayudó:

var x = 0; 
    var buttonText = 'LOADING'; 

    $('#startbutton').click(function(){ 
     $(this).text(buttonText); 
     window.setTimeout(addDotToButton,2000); 
    }) 

    function addDotToButton(){ 
     x++; 
     buttonText += '.'; 
     $('#startbutton').text(buttonText); 

     if (x < 4) window.setTimeout(addDotToButton, 2000); 
     else location.reload(true); 
    } 
+3

setTimeout ya fue mencionado hace mucho tiempo. y el resto del código no tiene nada que ver con la pregunta. – AbcAeffchen

1

setTimeout no aguantaría y reanudar en su propio hilo sin embargo Thread.sleep hace. No hay igual actual en Javascript

4

Suponiendo que pueda usar ECMAScript 2017, puede emular un comportamiento similar utilizando async/await y setTimeout. He aquí un ejemplo de la función del sueño:

async function sleep(msec) { 
    return new Promise(resolve => setTimeout(resolve, msec)); 
} 

continuación, puede utilizar la función dormir en cualquier otra función asíncrona como esto:

async function testSleep() { 
    console.log("Waiting for 1 second..."); 
    await sleep(1000); 
    console.log("Waiting done."); // Called 1 second the first console.log 
} 

Esto es bueno porque evita la necesidad de un servicio repetido. El inconveniente es que solo se puede usar en funciones asíncronas. Detrás de escena, la función testSleep se pausa, y después de que se termina el sueño, se reanuda.

De MDN:

La expresión hace que esperan ejecución de la función asíncrona para hacer una pausa hasta que un promesa se cumple o se rechaza, y para reanudar la ejecución de la función asíncrona después de haber cumplido.

Para ver una explicación completa:

+1

este es el enfoque recomendado en 2017 –

Cuestiones relacionadas