@D_K_D
Junior

Таймер выполняется в конце работы цикла?

Таймер в цикле выполняется при завершение цикла. , а нужно в потоке. Знаю что нужно использовать async await , но не понимаю в каком месте.
function lightWindow() {
    let numLight = [1, 3, 5, 7, 11];
    let houseLight = [3, 5, 11];

    for (const item of houseLight) {
        for (const num of numLight) {
            if (item == num) {
                setTimeout(async () => {
                    await console.log(num);
                }, 1000);
            }
        }
    }
}
lightWindow();
  • Вопрос задан
  • 57 просмотров
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Таймер выполняется в конце работы цикла?
Нет. Он инициируется в цикле, а каллбэк ставит в очередь выполнения через секунду после инициации.

Знаю что нужно использовать async await
async/await не рекомендуется использовать в цикле. Лучше переписать функцию с использованием setInterval.
function lightWindow() {
  const numLight = [1, 3, 5, 7, 11];
  const houseLight = [3, 5, 11];
  const lights = numLight.filter((el) => houseLight.includes(el));
  if (lights.length === 0) {
    return;
  }

  let idx = 0;
  const timer = setInterval(
    () => {
      console.log(lights[idx]);
      idx += 1;
      if (idx >= lights.length) {
        clearInterval(timer);
      }
    },
    1000,
  );
}
lightWindow();
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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