Esta función a continuación no funciona como yo quiero; siendo un novato de JS no puedo entender por qué.
Necesito que espere 5 segundos antes de verificar si newState
es así -1
.
Actualmente, no espera, solo verifica de inmediato.
function stateChange(newState) {
setTimeout('', 5000);
if(newState == -1) {
alert('VIDEO HAS STOPPED');
}
}
javascript
dom-events
copo de nieve
fuente
fuente
Respuestas:
Debe poner su código en la función de devolución de llamada que proporciona a
setTimeout
:Cualquier otro código se ejecutará de inmediato.
fuente
Realmente no debería estar haciendo esto , el uso correcto del tiempo de espera es la herramienta adecuada para el problema del OP y cualquier otra ocasión en la que solo desee ejecutar algo después de un período de tiempo. Joseph Silber lo ha demostrado bien en su respuesta. Sin embargo, si en algún caso de no producción realmente desea colgar el hilo principal por un período de tiempo, esto lo hará.
Con ejecución en forma:
Llegué aquí porque estaba creando un caso de prueba simple para secuenciar una combinación de operaciones asincrónicas alrededor de operaciones de bloqueo de larga duración (es decir, manipulación costosa del DOM) y esta es mi operación de bloqueo simulada. Se adapta bien a ese trabajo, así que pensé que lo publicaría para cualquier otra persona que llegue aquí con un caso de uso similar. Aun así, está creando un objeto Date () en un ciclo while, lo que podría abrumar al GC si se ejecuta el tiempo suficiente. Pero no puedo enfatizar lo suficiente, esto solo es adecuado para pruebas, para construir cualquier funcionalidad real, debe consultar la respuesta de Joseph Silber.
fuente
Aquí hay una solución usando la nueva sintaxis async / await .
Asegúrese de verificar el soporte del navegador ya que esta es una nueva característica introducida con ECMAScript 6.
Función de utilidad:
Uso:
La ventaja de este enfoque es que hace que su código se vea y se comporte como un código síncrono.
fuente
Use una función de retraso como esta:
Uso:
Créditos: ¿Cómo retrasar el controlador .keyup () hasta que el usuario deje de escribir?
fuente
No deberías solo intentar pausar 5 segundos en javascript. No funciona de esa manera. Puede programar una función de código para que se ejecute en 5 segundos a partir de ahora, pero debe poner el código que desea ejecutar más adelante en una función y el resto de su código después de esa función continuará ejecutándose inmediatamente.
Por ejemplo:
Pero, si tienes un código como este:
La
console.log()
declaración se ejecutará de inmediato. No esperará hasta que se active el tiempo de espera en lastateChange()
función. No puede simplemente pausar la ejecución de JavaScript durante un período de tiempo predeterminado.En cambio, cualquier código que desee ejecutar retrasos debe estar dentro de la
setTimeout()
función de devolución de llamada (o invocado desde esa función).Si intentó "pausar" haciendo un bucle, esencialmente "colgaría" el intérprete de Javascript por un período de tiempo. Debido a que Javascript ejecuta su código en un solo subproceso, cuando realiza un bucle, no se puede ejecutar nada más (no se puede llamar a otros controladores de eventos). Por lo tanto, el bucle en espera de que cambie alguna variable nunca funcionará porque no se puede ejecutar ningún otro código para cambiar esa variable.
fuente
var t = new Date().getTime(); while (new Date().getTime() < t + millisecondsToLockupBrowser);
Si está en una función asíncrona , simplemente puede hacerlo en una línea:
Tenga en cuenta que si el objetivo es NodeJS, será más eficiente usar esto (es una función setTimeout predefinida y prometida):
fuente
Prueba esto:
fuente
La mejor manera de crear una función como esta para esperar en milisegundos, esta función esperará milisegundos proporcionados en el argumento:
fuente
Según la respuesta de Joseph Silber , lo haría así, un poco más genérico.
Tendría su función (creemos una basada en la pregunta):
Y podría tener una función de espera:
Al final tendrías:
Esa es una solución, preferiría no usar argumentos en la función de espera (tener solo en
foo();
lugar defoo(arg);
), pero eso es por ejemplo.fuente
Esta solución proviene de la documentación de React Native para un control de actualización :
Para aplicar esto a la pregunta del OP, puede usar esta función en coordinación con
await
:fuente
Puede agregar demora haciendo pequeños cambios en su función (asíncrono y espera).
fuente
usando angularjs:
fuente
Crear nueva función Js
Llame a la función cuando desee retrasar la ejecución. Use milisegundos en int para el valor de retraso.
fuente
Lo usé para ejecutar juegos de PC desde edge o IE. Y se cierra automáticamente IE Edge después de 7 segundos.
Firefox y Google Chrome no se pueden usar para iniciar juegos de esta manera.
fuente