Problem z sleepem

0

Witam, mam problem z napisaniem kawałka jsa

Chcę przelecieć po całej tablicy zawierającą ID divów i pozmieniać im np. background-color na red

a następnie poczekać sekundę i powtórzyć to, ale teraz ustawić np background-color na blue.

var test = ["a","b"];

function sleep(ms) 
{
  return new Promise(resolve => setTimeout(resolve, ms));
}

function hide(item)
{
	document.getElementById(item).style.visibility="hidden";
	sleep(1000);
}

function show(item)
{
	document.getElementById(item).style.visibility="visible";
	sleep(1000);
}

test.forEach(hide);
sleep(1000);
test.forEach(show);

1

No to opisałeś problem, raz mi działa a raz nie,, chłopie konkretnie czego oczekiwałeś a co się stało......
NIe ma sleep'a w JS to nie Java !!! to co napisałeś działa tak: pętla, zrób coś za sekunde, pętla......zauważ, że zrób coś za sekunde != czekaj sekunde i zrób

1

JavaScript jest event driven, więc programowanie w JS polega raczej na czymś takim:

  • odpala się zdarzenie, np. użytkownik kliknie i jest onClick
  • w funkcji obsługującej zdarzenie (albo przy inicjalizacji skryptu) coś tam robisz i musisz to zrobić bardzo szybko, czyli nie żadne sleep bo to zawiesiłoby stronę. Cokolwiek robisz, musi to trwać z ułamek sekundy maks, bo inaczej przeglądarka się zawiesi.
  • po obsłudze zdarzenia (np. onClick) sterowanie się zwraca do przeglądarki i czekasz na kolejne zdarzenie.
  • jeśli chcesz to możesz "zamówić" wywołanie funkcji np. za sekundę, ale to nie jest sleep tylko raczej zamówienie. setTimeout to coś w stylu rób, przeglądarko co tam chcesz, ale "za około 1000 milisekund odpal funkcję, którą ci podam.

polecam ci ten filmik na Youtube, bo gościu to tłumaczy w przystępny sposób i zrobił nawet program do symulowania w uproszczony sposób, w jaki sposób się JS odpala:

Aha, nowe wersje JavaScriptu mają coś takiego jak async/await, które pozwalają pisać w ten sposób, jakby faktycznie było tak jak myślałeś, że jest - ale radziłbym najpierw się zapoznać z tematem Promise'ów (bo async/await opiera się i tak na Promise'ach). A przed promisami radziłbym zapoznać się z callbackami (bo Promise'y i tak sprowadzają się do callbacków owiniętych w obiekt).

0
Szczery napisał(a):

No to opisałeś problem, raz mi działa a raz nie,, chłopie konkretnie czego oczekiwałeś a co się stało......
NIe ma sleep'a w JS to nie Java !!! to co napisałeś działa tak: pętla, zrób coś za sekunde, pętla......

Racja. Mój błąd.

Chcę przelecieć po całej tablicy zawierającej ID divów i pozmieniać im np. background-color na red

a następnie poczekać X i powtórzyć to, ale teraz ustawić np background-color na blue.

zauważ, że zrób coś za sekunde != czekaj sekunde i zrób

JavaScript jest event driven, więc programowanie w JS polega raczej na czymś takim:
odpala się zdarzenie, np. użytkownik kliknie i jest onClick
w funkcji obsługującej zdarzenie (albo przy inicjalizacji skryptu) coś tam robisz i musisz to zrobić bardzo szybko, czyli nie żadne sleep bo to zawiesiłoby stronę. Cokolwiek robisz, musi to trwać z ułamek sekundy maks, bo inaczej przeglądarka się zawiesi.
po obsłudze zdarzenia (np. onClick) sterowanie się zwraca do przeglądarki i czekasz na kolejne zdarzenie.
jeśli chcesz to możesz "zamówić" wywołanie funkcji np. za sekundę, ale to nie jest sleep tylko raczej zamówienie. setTimeout to coś w stylu rób, przeglądarko co tam chcesz, ale "za około 1000 milisekund odpal funkcję, którą ci podam.

To wiele by wyjaśniało, dzięki

1 użytkowników online, w tym zalogowanych: 0, gości: 1