Questa funzione qui sotto non funziona come vorrei; essendo un novizio di JS non riesco a capire perché.
Ho bisogno che aspetti 5 secondi prima di controllare se il newState
è -1
.
Attualmente, non aspetta, controlla subito.
function stateChange(newState) {
setTimeout('', 5000);
if(newState == -1) {
alert('VIDEO HAS STOPPED');
}
}
Dovete mettere il vostro codice nella funzione di callback che fornite a setTimeout
:
function stateChange(newState) {
setTimeout(function () {
if (newState == -1) {
alert('VIDEO HAS STOPPED');
}
}, 5000);
}
Qualsiasi altro codice verrà eseguito immediatamente.
Non dovreste provare a mettere in pausa 5 secondi in javascript. Non funziona così. Potete programmare una funzione di codice da eseguire tra 5 secondi, ma dovete mettere il codice che volete eseguire più tardi in una funzione e il resto del vostro codice dopo quella funzione continuerà ad essere eseguito immediatamente.
Per esempio:
function stateChange(newState) {
setTimeout(function(){
if(newState == -1){alert('VIDEO HAS STOPPED');}
}, 5000);
}
Ma, se hai un codice come questo
stateChange(-1);
console.log("Hello");
L'istruzione console.log()
verrà eseguita immediatamente. Non aspetterà fino a quando il timeout scatta nella funzione stateChange()
. Non si può semplicemente mettere in pausa l'esecuzione del javascript per un periodo di tempo predeterminato.
Invece, qualsiasi codice che vuoi eseguire in ritardo deve essere all'interno della funzione di callback setTimeout()
(o chiamato da quella funzione).
Se provate a "mettere in pausa" con il looping, allora essenzialmente "bloccare" l'interprete Javascript per un periodo di tempo. Poiché Javascript esegue il tuo codice in un solo thread, quando stai facendo il looping nient'altro può essere eseguito (nessun altro gestore di eventi può essere chiamato). Quindi, il looping in attesa che qualche variabile cambi non funzionerà mai perché nessun altro codice può essere eseguito per cambiare quella variabile.
Usate una funzione di ritardo come questa:
var delay = ( function() {
var timer = 0;
return function(callback, ms) {
clearTimeout (timer);
timer = setTimeout(callback, ms);
};
})();
Uso:
delay(function(){
// do stuff
}, 5000 ); // end delay
I crediti vanno all'utente CMS, vedi https://stackoverflow.com/q/1909441/1066234