Początkowo może się to nie wydawać wielkim, ale w miarę postępów w świecie programowania zdasz sobie sprawę ze znaczenia funkcji „opóźnienia” i „czekających”. Tak więc, jeśli nie ma funkcji oczekiwania \ opóźnienia \ Sleep, nie ma możliwości kontrolowania wykonywania programu w JavaScript? Cóż, istnieją różne funkcje i metody, które pomagają nam osiągnąć to samo zadanie w JavaScript.
Korzystanie z funkcji Settimeout ()
Pierwszą i najczęstszą metodą wdrażania opóźnienia w wykonywaniu kodu JavaScript jest użycie settimeout () metoda. Popełnisz bardzo powszechny błąd, zakładając, że składnia jest:
Settimeout (opóźnienie w MS);Podczas gdy w rzeczywistości ta metoda pełni funkcję wywołania zwrotnego. Mając to na uwadze, możemy spojrzeć na składnię jako:
Składnia funkcji settimeout ()
Settimeout (funkcja, opóźnienie w MS);Aby lepiej zrozumieć działanie settimeout () Metoda, spróbujmy rozwiązać problem.
Przykład
Załóżmy, że chcemy wydrukować liczby od 1 do 10, z opóźnieniem 1 sekundy między każdą liczbą.
Tradycyjny sposób byłby:
dla (niech i = 1; i <=10 ; i++ )Wyjście kodu natychmiast drukuje wszystkie 10 cyfr, takie jak:
Ponieważ nie przekazujemy niczego do metody Settimeout ().
Aby dodać opóźnienie za pomocą metody Settimeout (), uważamy, że właściwy sposób jest:
dla (niech i = 1; pocieszam.log (i), 1000);Zamiast uzyskać 1-sekundowe opóźnienie po każdej liczbie, otrzymujemy 1-sekundowe opóźnienie na początku, a następnie wszystkie liczby są drukowane natychmiast. Jak pokazano niżej:
Mieliśmy początkowe opóźnienie, ale później nie opóźniliśmy się. Dlaczego to jest takie? Cóż, sposób, w jaki settimeout () Działa, że zawsze działa w trybie synchronicznym. Oznacza to, że nawet posiadanie wielu połączeń do tej samej funkcji spowoduje opóźnienie 1 sekundy.
To, co zrobiliśmy, to powołaliśmy każdy settimeout () metoda jeden po drugiej i ze względu na asynchroniczny charakter settimeout () metoda, nie czeka na poprzednie settimeout () metoda zakończenia, a następnie wykonania następnego.
Więc ostatecznie wykonaliśmy 10 połączeń settimeout () Metoda, która ma ten sam czas opóźnienia. Istnieje sposób, aby to naprawić, a to znaczy przy użyciu rosnącego timera opóźnienia:
settimeout (() => konsola.log (i), 1000);Powyższy przykład drukowania 10 liczb stałby się to:
dla (niech i = 1; pocieszam.log (i), i * 1000);Używamy rosnącej wartości zmiennej „i” i mnożą ją z 1-sekundowym opóźnieniem, aby utworzyć opóźnienia przyrostowe dla każdego wezwania settimeout ()
Wyjście z tym staje się:
W końcu to zrobiliśmy. Ale wciąż coś jest nie tak. To jest fakt, że obliczanie opóźnień w ten sposób jest bardzo skomplikowane, szczególnie gdy pracujesz w rzeczywistej aplikacji. Jest też sposób na to, utwórz własną metodę opóźnienia/oczekiwania.
Jak kodować własną funkcję opóźnienia/oczekiwania?
Chcemy lepszego rozwiązania, to, co możemy zrobić, to kodować własne „opóźnienie" metoda. Będziemy używać settimeout () funkcjonowanie i obietnice pomoże nam stworzyć „opóźnienie„Metoda jako:
Po prostu utworzymy funkcję o nazwie „opóźnienia” i przekazamy jej czas w milisekundach. Ta funkcja „opóźnienia” zwraca obietnicę i nie pozwoli wykonać wykonania, dopóki obietnica nie zostanie rozwiązana.
Opóźnienie funkcji (MS)Teraz nazywamy tę funkcję „opóźnienia” za pomocą „.Następnie „Operator. Lubię to:
konsola.log („Hello”);Wyjście byłoby:
Tworzymy obietnicę i settimeout () metoda z pewnym opóźnieniem rozstrzygać obietnica. Możesz przeczytać więcej o obietnice JavaScript.
Na wypadek, gdybyś chciał pozbyć się .Następnie() Metoda i, aby łagodzić opóźnienia, możemy użyć Async I czekać na z naszą funkcją „opóźnienia”.
Demo funkcji async ()Uwaga: musimy dodać Async słowo kluczowe z funkcją wywołującą opóźnienie() metoda. Jeśli uruchomimy program, który otrzymamy, to:
Drukarkę do naszego problemu, drukarka liczbowa od 1 do 10, musimy utworzyć ją w funkcji asynchronizacji i wywołać metodę „opóźnienia”, którą właśnie stworzyliśmy:
Async Function NumberPrinter ()I musimy wywołać tę funkcję:
NumberPrinter ();Wyjście, które otrzymujemy, to:
To jest dla naszej funkcji „opóźnienia”.
Wniosek
Nie ma wbudowanego Czekać, opóźnienie, lub funkcja snu w JavaScript, ale możemy użyć settimeout () metoda naśladowania zachowania opóźnienia, a możemy nawet kodować własne opóźnienie() metoda utworzenia opóźnienia w wykonywaniu programu. Nauczyliśmy się, jak settimeout () Metoda działa, jak powszechne jest błędne zrozumienie jej pracy i użycia. Ponadto nauczyliśmy się połączyć metodę Settimeout () z obietnice Aby stworzyć własną metodę opóźnienia, a także nauczyliśmy się używać Async I czekać na na naszej funkcji, aby poczekać, a następnie kontynuować wykonanie.