¿Existe algún método de JavaScript similar al jQuery delay()
o wait()
(para retrasar la ejecución de un script por un período de tiempo específico)?
javascript
settimeout
Niyaz
fuente
fuente
function_reference
menos que lo incluya()
. Es decir,function_reference
eso es una referencia; pasarfunction_reference()
invocaría la función de inmediato.Solo para agregar a lo que todos los demás han dicho sobre
setTimeout
: si desea llamar a una función con un parámetro en el futuro, debe configurar algunas llamadas a funciones anónimas.Debe pasar la función como argumento para que se llame más tarde. En efecto, esto significa sin corchetes detrás del nombre. Lo siguiente llamará a la alerta de inmediato y mostrará 'Hola mundo':
Para solucionar esto, puede poner el nombre de una función (como lo ha hecho Flubba) o puede usar una función anónima. Si necesita pasar un parámetro, debe usar una función anónima.
Pero si ejecuta ese código, notará que después de 2 segundos la ventana emergente dirá 'Hola desbordamiento de pila'. Esto se debe a que el valor de la variable a ha cambiado en esos dos segundos. Para que diga 'Hola mundo' después de dos segundos, debe usar el siguiente fragmento de código:
Esperará 2 segundos y luego emergerá 'Hola mundo'.
fuente
Solo para expandir un poco ... Puede ejecutar código directamente en la
setTimeout
llamada, pero como dice @patrick , normalmente asigna una función de devolución de llamada, como esta. El tiempo es milisegundosfuente
Si realmente desea tener una función de bloqueo (síncrona)
delay
(por cualquier motivo), ¿por qué no hacer algo como esto?fuente
delay
de responder (para responder a esta pregunta ). ¿Hay alguna manera de hacerlo?Debe usar setTimeout y pasarle una función de devolución de llamada. La razón por la que no puedes usar sleep en javascript es porque bloquearías que toda la página no hiciera nada mientras tanto. No es un buen plan. Usa el modelo de eventos de Javascript y mantente feliz. ¡No luches!
fuente
También puede usar window.setInterval () para ejecutar código repetidamente a intervalos regulares.
fuente
setTimeout()
lo hace una vez, losetInterval()
hace repetidamente. Si desea que su código se ejecute cada 5 segundos,setInterval()
está hecho para el trabajo.Para agregar los comentarios anteriores, me gustaría decir lo siguiente:
La
setTimeout()
función en JavaScript no detiene la ejecución del script per se, sino que simplemente le dice al compilador que ejecute el código en algún momento en el futuro.No hay una función que realmente pueda pausar la ejecución integrada en JavaScript. Sin embargo, puede escribir su propia función que haga algo así como un bucle incondicional hasta que se alcance el tiempo utilizando la
Date()
función y agregando el intervalo de tiempo que necesita.fuente
Si solo necesita probar un retraso, puede usar esto:
Y luego, si quieres retrasar 2 segundos, lo haces:
Sin embargo, podría no ser el mejor para la producción. Más sobre eso en los comentarios
fuente
¿Por qué no puedes poner el código detrás de una promesa? (escrito en la parte superior de mi cabeza)
fuente
La respuesta simple es:
La función anterior espera 1 segundo (1000 ms) y luego establece x en 1. Obviamente, este es un ejemplo; Puedes hacer lo que quieras dentro de la función anónima.
fuente
Me gustó mucho la explicación de Maurius (la respuesta más votada) con los tres métodos diferentes para llamar
setTimeout
.En mi código, deseo navegar automáticamente a la página anterior al completar un evento de guardar AJAX. La finalización del evento guardar tiene una ligera animación en el CSS que indica que el guardado fue exitoso.
En mi código encontré una diferencia entre los dos primeros ejemplos:
Este no espera el tiempo de espera: se llama a back () casi de inmediato, sin importar el número que ingrese para el retraso.
Sin embargo, cambiando esto a:
Esto hace exactamente lo que esperaba.
Esto no es específico de la operación back (), sucede lo mismo con
alert()
. Básicamente con elalert()
utilizado en el primer caso, se ignora el tiempo de retraso. Cuando descarto la ventana emergente, la animación para el CSS continúa.Por lo tanto, recomendaría el segundo o tercer método que describe, incluso si está utilizando funciones integradas y no está utilizando argumentos.
fuente
Tenía algunos comandos ajax que quería ejecutar con un retraso en el medio. Aquí hay un ejemplo simple de una forma de hacerlo. Sin embargo, estoy preparado para ser destrozado por mi enfoque poco convencional. :)
Puede copiar el bloque de código y pegarlo en una ventana de consola y ver algo como:
fuente
La solución más simple para llamar a su función con retraso es:
fuente
función de retraso:
uso dentro de la
async
función:fuente
Como dijo otro, setTimeout es su apuesta más segura.
Pero a veces no puede separar la lógica de una nueva función, entonces puede usar Date.now () para obtener milisegundos y hacer el retraso usted mismo ...
fuente