Czy istnieje jakakolwiek metoda JavaScript podobna do jQuery delay()
lub wait()
(aby opóźnić wykonanie skryptu o określony czas)?
javascript
settimeout
Niyaz
źródło
źródło
function_reference
chyba że zostanie to uwzględnione()
. To znaczyfunction_reference
To tylko to - odniesienie; przekazaniefunction_reference()
wywołałoby funkcję natychmiast.Aby dodać do tego, o czym wszyscy inni mówili
setTimeout
: jeśli chcesz wywołać funkcję z parametrem w przyszłości, musisz skonfigurować anonimowe wywołania funkcji.Musisz przekazać funkcję jako argument, aby mogła zostać wywołana później. W efekcie oznacza to brak nawiasów za nazwą. Następujące wywołają alert natychmiast i wyświetli „Hello world”:
Aby to naprawić, możesz albo wpisać nazwę funkcji (jak zrobiła to Flubba), albo możesz użyć funkcji anonimowej. Jeśli musisz przekazać parametr, musisz użyć funkcji anonimowej.
Ale jeśli uruchomisz ten kod, zauważysz, że po 2 sekundach wyskakujące okienko powie „Hello Stack Overflow”. Jest tak, ponieważ wartość zmiennej a zmieniła się w ciągu tych dwóch sekund. Aby po dwóch sekundach powiedzieć „Witaj świecie”, musisz użyć następującego fragmentu kodu:
Poczeka 2 sekundy, a następnie wyskakujące okienko „Hello world”.
źródło
Tylko trochę rozwinąć ... Możesz wykonać kod bezpośrednio w
setTimeout
wywołaniu, ale jak mówi @patrick , zwykle przypisujesz funkcję wywołania zwrotnego, tak jak to. Czas to milisekundyźródło
Jeśli naprawdę chcesz mieć funkcję blokującą (synchroniczną)
delay
(cokolwiek), dlaczego nie zrobić czegoś takiego:źródło
delay
ing (aby odpowiedzieć na to pytanie ). Czy jest na to jakiś sposób?Musisz użyć setTimeout i przekazać mu funkcję zwrotną. Powodem, dla którego nie możesz korzystać ze snu w javascript, jest to, że w międzyczasie blokowałbyś całą stronę. Niezły plan. Skorzystaj z modelu zdarzeń Javascript i bądź szczęśliwy. Nie walcz z tym!
źródło
Możesz także użyć funkcji window.setInterval (), aby wielokrotnie uruchamiać kod w regularnych odstępach czasu.
źródło
setTimeout()
robi to raz,setInterval()
robi to wielokrotnie. Jeśli chcesz, aby Twój kod był uruchamiany co 5 sekund,setInterval()
jest przeznaczony dla zadania.Aby dodać wcześniejsze komentarze, chciałbym powiedzieć, co następuje:
setTimeout()
Funkcji w JavaScript nie wstrzymać wykonanie skryptu per se, ale jedynie informuje kompilator do wykonania kodu kiedyś w przyszłości.Nie ma funkcji, która może faktycznie wstrzymać wykonywanie wbudowane w JavaScript. Możesz jednak napisać własną funkcję, która robi coś w rodzaju bezwarunkowej pętli, dopóki czas nie zostanie osiągnięty, używając
Date()
funkcji i dodając potrzebny przedział czasu.źródło
Jeśli potrzebujesz tylko przetestować opóźnienie, możesz użyć tego:
A jeśli chcesz opóźnić o 2 sekundy, robisz:
Może nie być najlepszy do produkcji. Więcej na ten temat w komentarzach
źródło
dlaczego nie możesz umieścić kodu za obietnicą? (wpisany na czubku głowy)
źródło
Prosta odpowiedź brzmi:
Powyższa funkcja czeka 1 sekundę (1000 ms), a następnie ustawia x na 1. Oczywiście jest to przykład; możesz zrobić wszystko, co chcesz w ramach funkcji anonimowej.
źródło
Naprawdę podobało mi się wyjaśnienie Mauriusa (najwyższa pozytywna odpowiedź) z trzema różnymi metodami wywoływania
setTimeout
.W moim kodzie chcę automatycznie nawigować do poprzedniej strony po zakończeniu zdarzenia zapisu AJAX. Zakończenie zdarzenia zapisywania ma niewielką animację w CSS, co wskazuje, że zapis był udany.
W moim kodzie znalazłem różnicę między pierwszymi dwoma przykładami:
Ten nie czeka na przekroczenie limitu czasu - funkcja back () jest wywoływana prawie natychmiast, bez względu na to, jaki numer wprowadzę dla opóźnienia.
Jednak zmieniając to na:
To robi dokładnie to, na co liczyłem.
Nie jest to specyficzne dla operacji back (), to samo dzieje się z
alert()
. Zasadniczo w przypadkualert()
zastosowanego w pierwszym przypadku czas opóźnienia jest ignorowany. Kiedy odrzucam wyskakujące okienko, animacja dla CSS jest kontynuowana.Dlatego poleciłbym drugą lub trzecią metodę, którą opisuje, nawet jeśli używasz wbudowanych funkcji i nie używasz argumentów.
źródło
Miałem kilka komend ajax, które chciałem uruchomić z opóźnieniem pomiędzy nimi. Oto prosty przykład jednego ze sposobów, aby to zrobić. Jestem przygotowany na rozerwanie na strzępy ze względu na moje niekonwencjonalne podejście. :)
Możesz skopiować blok kodu i wkleić go do okna konsoli i zobaczyć coś takiego:
źródło
Najprostszym sposobem na wywołanie funkcji z opóźnieniem jest:
źródło
funkcja opóźnienia:
użycie
async
funkcji wewnętrznej :źródło
Jak już powiedziano, setTimeout jest najbezpieczniejszym zakładem.
Ale czasami nie można oddzielić logiki do nowej funkcji, wówczas można użyć funkcji Date.now (), aby uzyskać milisekundy i samodzielnie wykonać opóźnienie ....
źródło