Esta función de abajo no funciona como yo quiero; siendo un novato en JS no puedo entender por qué.
Necesito que espere 5 segundos antes de comprobar si el newState
es -1
.
Actualmente, no espera, sólo comprueba directamente.
function stateChange(newState) {
setTimeout('', 5000);
if(newState == -1) {
alert('VIDEO HAS STOPPED');
}
}
Tienes que poner tu código en la función callback que suministras a setTimeout
:
function stateChange(newState) {
setTimeout(function () {
if (newState == -1) {
alert('VIDEO HAS STOPPED');
}
}, 5000);
}
Cualquier otro código se ejecutará inmediatamente.
No debe intentar hacer una pausa de 5 segundos en javascript. No funciona así. Puedes programar una función de código para que se ejecute dentro de 5 segundos, pero tienes que poner el código que quieres que se ejecute más tarde en una función y el resto de tu código después de esa función seguirá ejecutándose inmediatamente.
Por ejemplo:
function stateChange(newState) {
setTimeout(function(){
if(newState == -1){alert('VIDEO HAS STOPPED');}
}, 5000);
}
Pero, si tienes un código como este
stateChange(-1);
console.log("Hello");
La sentencia console.log()
se ejecutará inmediatamente. No esperará hasta que el tiempo de espera se dispare en la función stateChange()
. No se puede pausar la ejecución de javascript durante un tiempo predeterminado.
En su lugar, cualquier código que quieras que se retrase debe estar dentro de la función callback setTimeout()
(o ser llamado desde esa función).
Si tratas de "pausar" mediante un bucle, entonces esencialmente "colgar" el intérprete de Javascript durante un período de tiempo. Debido a que Javascript ejecuta su código en un solo hilo, cuando usted'está haciendo un bucle nada más puede ejecutarse (ningún otro manejador de eventos puede ser llamado). Por lo tanto, hacer un bucle esperando que alguna variable cambie nunca funcionará porque ningún otro código puede ejecutarse para cambiar esa variable.
Utiliza una función de retardo como ésta:
var delay = ( function() {
var timer = 0;
return function(callback, ms) {
clearTimeout (timer);
timer = setTimeout(callback, ms);
};
})();
Uso:
delay(function(){
// do stuff
}, 5000 ); // end delay
Los créditos van al usuario CMS, ver https://stackoverflow.com/q/1909441/1066234