@sidorikv

Как я могу ждать выполнения setInterval?

Есть простая функция:
async function monitor() {
    let counter = 1
    let ping = setInterval(async () => {
        console.log(counter++)
        if (counter > 999) {clearInterval(ping)}
    })
    console.log("y")
}

Нужно сделать так, чтобы console.log("y") выводился после setInterval, но при вызове:
async function monitor() {
    let counter = 1
    let ping = setInterval(async () => {
        console.log(counter++)
        if (counter > 999) {clearInterval(ping)}
    })
    console.log("y")
}

(async () => {
    let test = await monitor()
})()


Выводится console.log("y") сразу, как можно реализовать?
  • Вопрос задан
  • 767 просмотров
Решения вопроса 2
sergiks
@sergiks Куратор тега JavaScript
♬♬
Вот пример с setTimeout() — сначала зарядится таймер, отработает: отресолвит промис, и после этого уже сработает финальный console.log()
async function monitor() {
  await new Promise(resolve => {
    setTimeout(() => {
      console.log("Прошла секунда");
      resolve();
    }, 1000);
  });

  console.log("После Вас!")
}

monitor();
Ответ написан
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
async function monitor() {
  await new Promise((resolve) => {
    let counter = 1;
    const ping = setInterval(() => {
      console.log(counter++)
      if (counter > 999) {
        clearInterval(ping);
        resolve();
      }
    });
  });
  console.log("y")
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@GrayHorse
Уже в который раз пишу, используйте эту наипростейшую функцию для написания простого и понятного кода если трубуются "паузы":

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


Поскольку не понятно, что ты пытался сделать. Вот пример использования:
for (let i = 0; i < 10; i++) {
    console.log(i);
    await sleep(100);
}
await sleep(1000);
console.log("Done");

— вывод сообщения каждые 100 мс, и еще через секунду "Done".
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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