¿Cuál es el equivalente de Thread.sleep() de Java en JavaScript? [duplicar]
¿Cuál es el equivalente de Java Thread.sleep()
en JavaScript?
La respuesta simple es que no existe tal función.
Lo más parecido que tienes es:
var millisecondsToWait = 500;
setTimeout(function() {
// Whatever you want to do after the wait
}, millisecondsToWait);
Tenga en cuenta que, en especial, no desea estar ocupado esperando (por ejemplo, en un bucle giratorio), ya que es casi seguro que su navegador esté ejecutando su JavaScript en un entorno de un solo subproceso.
Aquí hay un par de otras preguntas SO que tratan con subprocesos en JavaScript:
- JavaScript y subprocesos
- ¿Por qué JavaScript no admite subprocesos múltiples?
Y esta pregunta también puede resultar útil:
- setTimeout: ¿cómo evitar el uso de cadenas para devolución de llamada?
Pruebe con este código. Espero que te sea útil.
function sleep(seconds)
{
var e = new Date().getTime() + (seconds * 1000);
while (new Date().getTime() <= e) {}
}
Suponiendo que pueda utilizar ECMAScript 2017, puede emular un comportamiento similar utilizando async/await y setTimeout. A continuación se muestra un ejemplo de función de suspensión:
async function sleep(msec) {
return new Promise(resolve => setTimeout(resolve, msec));
}
Luego puedes usar la función de suspensión en cualquier otra función asíncrona como esta:
async function testSleep() {
console.log("Waiting for 1 second...");
await sleep(1000);
console.log("Waiting done."); // Called 1 second after the first console.log
}
Esto es bueno porque evita la necesidad de una devolución de llamada. La desventaja es que sólo se puede utilizar en funciones asíncronas. Detrás de escena, la función testSleep se pausa y, una vez que se completa el sueño, se reanuda.
De MDN:
La expresión de espera hace que la ejecución de la función asíncrona se detenga hasta que se cumpla o rechace una Promesa, y reanude la ejecución de la función asíncrona después del cumplimiento.
Para una explicación completa ver:
- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function
- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/await
Para obtener la mejor solución, utilice la declaración async/await para el script ecma 2017
await puede usarse solo dentro de la función asíncrona
function sleep(time) {
return new Promise((resolve) => {
setTimeout(resolve, time || 1000);
});
}
await sleep(10000); //this method wait for 10 sec.
Nota: async/await no es un hilo detenido como Thread.sleep, pero lo simula