Ponieważ nie mogłem skomentować, jestem zmuszony napisać ten post. Otrzymałem poniższy kod, który opóźnia / czeka dokładnie 1 sekundę lub 1000 milisekund -
let n = 5;
for (let i=1; i<n; i++)
{
setTimeout( function timer()
{
console.log("hello world");
}, i*1000 );
}
Ale jak mogę to opóźnić i * 1000 sekund zamiast ustalonych 1000 milisekund, aby oczekiwanie zależało od liczby iteracji?
Na przykład, jeśli n = 5, chcę opóźnienie pętli o 1 sekundę w 1. iteracji. 2 sekundy w drugiej iteracji itd. Końcowe opóźnienie wyniesie 5 sekund.
javascript
wait
Mikrofon
źródło
źródło
i
- jeśli tego nie zrobiłeś, to dostaniesz wszystkie te powiadomienia w tym samym czasie.Odpowiedzi:
Oto funkcja, która wyświetli się natychmiast, a następnie 1 sekundę później, 2 sekundy później, 3 sekundy później itd. Bez specjalnej matematyki, bez obietnic
źródło
Chociaż to zadanie można rozwiązać za pomocą obietnic, reaktywnych strumieni i innych fajnych narzędzi (hej, nikt jeszcze nie sugerował użycia pracowników!), Można je również rozwiązać za pomocą niewielkiej arytmetyki.
Chcesz więc limitów czasu w sekwencji: 1 s, poprzedni + 2 s, poprzedni + 3 i tak dalej. Ta sekwencja to: 1, 3, 6, 10, 15 ... a jej wzór to
a[n] = n * (n + 1) / 2
. Wiedząc to...źródło
Możesz spróbować użyć kodu async / await (Promises), aby serializować kod:
źródło
Zajęło mi trochę czasu, aby rozszyfrować twoje pytanie xD, ale czy tego właśnie chcesz?
Spowoduje to ciągłe odpalanie pliku console.log z opóźnieniem i * 1000. więc za pierwszym razem będzie to 1 sekunda (1 * 1000), następnie będzie to 2 sekundy i tak dalej.
źródło
Pętla nie czeka na zakończenie funkcji limitu czasu. Tak więc, gdy pętla działa, planuje alert dla każdego indeksu.
Możesz użyć funkcji, która będzie działać zgodnie z twoim indeksem, ale zaplanowanym w tym samym czasie. Możesz poczuć różnicę 3 sekund.
źródło
Użyj wywołań rekurencyjnych zamiast pętli for
źródło