Uruchom funkcję setInterval bez opóźnienia za pierwszym razem
Istnieje sposób na skonfigurowanie metody
setIntervalz poziomu javascript w celu natychmiastowego wykonania metody, a następnie wykonania jej z zegarem
Nie znaleziono powiązanych wyników
Zaproszony:
Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się
14 odpowiedzi
Anonimowy użytkownik
Potwierdzenie od:
Istnieją jednak dobre powody, aby unikać - w szczególności w niektórych okolicznościach całe obciążenie zdarzeń może nadejść natychmiast po sobie bez żadnych opóźnień. Innym powodem jest to, że jeśli chcesz zatrzymać pętlę, musisz jawnie wywołać , co oznacza, że musisz zapamiętać deskryptor zwrócony z pierwotnego wywołania .
Zatem alternatywną metodą jest wyzwalanie samego siebie dla kolejnych wywołań, używając zamiast tego :
To gwarantuje, że tak jest
przynajmniej
najmniejszy odstęp między połączeniami. Ułatwia również anulowanie pętli w razie potrzeby - po prostu nie wywołujesz , gdy zostanie osiągnięty warunek końcowy.
Jeszcze lepiej, możesz to wszystko opakować
natychmiast nazywany wyrażeniem funkcyjnym
który tworzy funkcję, która następnie wywołuje siebie ponownie, jak opisano powyżej, i automatycznie uruchamia pętlę:
który definiuje funkcję i uruchamia pętlę za jednym razem.
Anonimowy użytkownik
Potwierdzenie od:
Oczywiście jest na to wiele sposobów, ale jest to najkrótszy sposób, jaki przychodzi mi do głowy.
Anonimowy użytkownik
Potwierdzenie od:
zachowywać się dokładnie
to samo co , ale z tym
tylko
różnica polega na tym, że funkcja jest wywoływana natychmiast na początku.
Oto moje rozwiązanie tego problemu:
Zaleta tego rozwiązania:
Przykład:
Aby być zarozumiałym, jeśli naprawdę potrzebujesz użyć , możesz także zastąpić oryginalny . Dlatego dodanie tego kodu przed istniejącym nie wymaga żadnych zmian w kodzie:
Jednak wszystkie wymienione powyżej świadczenia mają tutaj zastosowanie, ale wymiana nie jest wymagana.
Anonimowy użytkownik
Potwierdzenie od:
...
następnie użyj tego w ten sposób:
Anonimowy użytkownik
Potwierdzenie od:
Ustaw trzeci argument na setInterval na true, a zadziała to za pierwszym razem zaraz po wywołaniu setInterval:
Lub pomiń trzeci argument, a zachowa swoje pierwotne zachowanie:
Niektóre przeglądarki obsługują
dodatkowe argumenty
https://developer.mozilla.org/ ... erval
dla setInterval, które to opakowanie ignoruje; Myślę, że są rzadko używane, ale miej to na uwadze, jeśli naprawdę ich potrzebujesz.
Anonimowy użytkownik
Potwierdzenie od:
Możesz też zdać
w foo, jeśli chcesz, aby pod pewnymi warunkami
Anonimowy użytkownik
Potwierdzenie od:
Jeśli powyższe generowanie śmieci przeszkadza Ci, możesz zamiast tego wykonać zamknięcie.
A może rozważ użycie decorator
https://www.npmjs.com/package/autobind-decorator
w zależności od twojego kodu.
Anonimowy użytkownik
Potwierdzenie od:
<div class="snippet-code">
<div class="snippet" data-babel="false" data-console="true" data-hide="false" data-lang="js">
<pre class="snippet-code-js lang-js prettyprint-override">
Anonimowy użytkownik
Potwierdzenie od:
Anonimowy użytkownik
Potwierdzenie od:
<div class="snippet" data-hide="false" data-lang="js">
<pre class="snippet-code-js lang-js prettyprint-override">
Anonimowy użytkownik
Potwierdzenie od:
firstInterval
https://www.npmjs.com/package/first-interval
(pełne ujawnienie, to jest moje).
Wiele przykładów tutaj nie obejmuje obsługi parametrów, a zmiana domyślnego zachowania w każdym dużym projekcie jest zła. Z dokumentów:
Ten szablon
identyczny z
Jeśli jesteś oldschoolowy w przeglądarce i nie chcesz zależności, jest to prosta metoda „wytnij i wklej”
kod.
https://github.com/jimm101/firstInterval
Anonimowy użytkownik
Potwierdzenie od:
<div class="snippet-code">
<div class="snippet" data-babel="false" data-console="true" data-hide="false" data-lang="js">
<pre class="snippet-code-js lang-js prettyprint-override">
Anonimowy użytkownik
Potwierdzenie od:
Przykład PRAWDZIWEGO kodu z zerowym opóźnieniem, który działa w Chrome, Safari, Opera
Więcej informacji można znaleźć
tutaj
http://ajaxian.com/archives/settimeout-delay
Po pierwszym ręcznym wywołaniu możesz utworzyć interwał za pomocą swojej funkcji.
Anonimowy użytkownik
Potwierdzenie od:
to wywoła moją funkcję, a następnie będzie to robić co 45 sekund, co różni się od robienia
co nie zadzwoni, ale tylko zaplanuje