Więcej
Odczekaj 5 sekund przed wykonaniem następnej linii
Ta funkcja poniżej nie działa tak, jakbym tego chciał; będąc nowicjuszem w JS nie mogę się dowiedzieć dlaczego.
Potrzebuję, aby odczekała 5 sekund przed sprawdzeniem czy newState
jest -1
.
Obecnie nie czeka, tylko od razu sprawdza.
function stateChange(newState) {
setTimeout('', 5000);
if(newState == -1) {
alert('VIDEO HAS STOPPED');
}
}
257
3
Musisz umieścić swój kod w funkcji callback, którą dostarczasz do
setTimeout
:Każdy inny kod wykona się natychmiast.
Nie powinieneś po prostu próbować pauzować 5 sekund w javascript. To nie działa w ten sposób. Możesz zaplanować funkcję kodu do uruchomienia za 5 sekund od teraz, ale musisz umieścić kod, który chcesz uruchomić później w funkcji, a reszta twojego kodu po tej funkcji będzie nadal działać natychmiast.
Na przykład:
Ale, jeśli masz kod taki jak ten:
Polecenie
console.log()
zostanie uruchomione natychmiast. Nie będzie czekać, aż upłynie limit czasu w funkcjistateChange()
. Nie można po prostu wstrzymać wykonywania javascript na określony czas.Zamiast tego, każdy kod, który chcesz uruchomić z opóźnieniem musi być wewnątrz funkcji wywołania zwrotnego
setTimeout()
(lub wywołany z tej funkcji).Jeśli spróbowałbyś "wstrzymać" przez zapętlenie, wtedy zasadniczo "zawiesiłbyś" interpreter Javascript na pewien okres czasu. Ponieważ Javascript uruchamia Twój kod tylko w jednym wątku, kiedy Ty'jesteś zapętlony nic innego nie może działać (żadne inne event handlery nie mogą zostać wywołane). Tak więc, pętla czekająca na zmianę jakiejś zmiennej nigdy nie zadziała, ponieważ żaden inny kod nie może zostać uruchomiony, aby zmienić tę zmienną.
Użyj funkcji opóźniającej, takiej jak ta:
Użycie:
Credits go to user CMS, zobacz https://stackoverflow.com/q/1909441/1066234