Как выполнить setTimeout по очереди в JavaScript?

227
03 сентября 2021, 12:40

Я только изучаю JS, Подскажите пожалуйста, как выполнить setTimeout по очереди в JavaScript ?

У меня есть 4 функции которые выполняются по setTimeout и должны выполняться по очереди. Как это сделать ? Сейчас сначала выполняется та функция у которого секунды меньше остальных, что и логично.

И еще нужно сделать так, чтобы после выполнения последней функции сработал setInterval и весь процесс повторялся.

Answer 1
// Определяем функцию задержки в которую передаем время
const delay = (time) => {
   return new Promise((resolve, reject) => setTimeout(resolve, time))
}
// вызываем
delay(100) // через 100 мс
.then(() => {
  console.log('1 шаг');
  return delay(200) // через 200 мс
})
.then(() => {
  console.log('2й шаг');
  return delay(150) // через 150 мс
})
.then(() => {
  console.log('3й шаг');
})
// и так далее

При необходимости добавления новых функций просто наращиваем цепочку, добавляя новые .then(). Если задержка между ними нужна нулевая можно просто не возвращать delay(...), функции все равно будут выполнены последовательно. Такой подход гораздо удобнее чем использование callback hell, что является плохой практикой.

Answer 2
var timerId = setTimeout(function tick() {
  alert('tick');
  timerId = setTimeout(tick, 2000);
}, 2000);

Просто вызывайте свои функции рекурсивно через нужный интервал времени

READ ALSO
Как выполить scroll при клике на меню? [дубликат]

Как выполить scroll при клике на меню? [дубликат]

Нужно реализовать прокрутку, при клике на определенный элемент меню с анимациейСкролл будет выполняться к выбраному блоку

187
Префиксы css для flex

Префиксы css для flex

Вот код css

268
Неправильная запись при сохранении QJson

Неправильная запись при сохранении QJson

Не могу найти чего то подобного на просторах ИнетаПроблема в следующем: Читаю json файл, после просто сохраняю

252