Przejdź do głównej zawartości

Efektem działania błędnego kodu będzie zalogowanie tekstu do konsoli po upływie jednej sekundy, dziesięciokrotnie naraz.

Nasz błąd logiczny ukrył się w przekazanym argumencie opóźnienia w funkcji setTimeout().

Ustawione opóźnienie 1 sekundy (1000 milisekund) nie zmienia się w żadnej iteracji pętli.

Pętla for(), 10 razy wywołuje setTimeout(), który przy każdym wywołaniu ma ustawiane to samo opóźnienie.

Aby uzyskać pożądany efekt 1 sekundowych opóźnień pomiędzy wywołaniami kodu, musimy pomnożyć opóźnienie przez wartość indeksu (i) w każdej z iteracji pętli

Uzyskamy wtedy wywołania z rosnącą różnicą odstępu czasu:

  • setTimeout(() => {...}, 0)
  • setTimeout(() => {...}, 1000)
  • setTimeout(() => {...}, 2000)

I właśnie o taki efekt nam chodzi.

Pomiędzy każdym z wywołań kodu z anonimowej funkcji strzałkowej przekazanej jako callback do setTimeout(), różnica odstępu wykonania kodu w czasie będzie wynosiła 1000 milisekund.