mk3mk
@mk3mk
занимаюсь вёрсткой (иногда)

Коллбэк не получается?

всем привет!
хочу для понимания коллбэков решить такую задачу:
Первым - появляется красный квадрат,
Вторым - происходит поочерёдное появление цифр от 0 до 99
Третьим - появляется зелёный квадрат
Но что-то никак не могу понять, всё появляется одновременно.
Если можете, подскажите

вот тут код
https://codepen.io/mk3mk/pen/YzPwOGY?editors=1010
  • Вопрос задан
  • 125 просмотров
Пригласить эксперта
Ответы на вопрос 3
@hurgadan
Это вопрос не к работе колбека, он у вас работает.
Все это не появляется одновременно, просто вы визуально это не заметите никак при такой реализации.
1) 200мс в setTimeout это слишком мало. Поставьте 2000мс хотя бы, еще лучше 20000мс
2) Блоки закрашиваются один за другим, т.е. визуально фактически одновременно.
Ответ написан
Комментировать
hzzzzl
@hzzzzl
for ( let i=0; i<100; i++ ){
    setTimeout(function(){
      info.innerText +=  i + ', ';
    }, i * 200 );   // 0 200 400 600 ...
  }


иначе у тебя все таймауты срабатывают одновременно через 200 мс
Ответ написан
@VeniVidiVici7
Зелёный квадрат подсвечивается сразу, потому что код в setTimeOut выполнится позже.
1) сначала подсвечивается красный квадрат
2) проходит цикл, setTimeOut уходит в web api
3) подсвечивается зелёный квадрат
4) стек освободился и теперь то что было в setTimeout начинает своё выполнение (гугли event loop, есть хорошие видео на эту тему)

Если хочешь чтобы зелёный квадрат подсветился в конце, можно внутри setTimeout отследить последний шаг итерации https://codepen.io/LOL1/pen/dyPMGNz?editors=1010
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы