Как я могу запустить setInterval после очистки первого?

#javascript #jquery

#javascript #jquery

Вопрос:

Как я могу запустить setInterval после завершения предыдущего?

У меня есть следующий код:

 const interval = setInterval(function () {
  prePost();
  array = images;
  main(current);
  if (current < array.length - 1) {
    current  
  } else {
    clearInterval(interval)
  }
}(), 6200);

const interval2 = setInterval(function () {
  prePost();
  array = objects;
  main(current);
  if (current < array.length - 1) {
    current  
  } else {
    clearInterval(interval2)
  }
}(), 6200);
  

И я хочу interval2 быть выполненным, но не до interval тех пор, пока не будет очищен и даже третий. Как этого можно достичь? Прямо сейчас они оба выполняются одновременно.

Комментарии:

1. запустите его там, где вы выполняете clearInterval — или вы могли бы сделать const start2 = () => { const interval2 = ...rest of that code ... }; , а затем просто вызвать start2() after clearInterval(interval)

2. Поскольку у вас много повторяющегося кода, было бы лучше извлечь ваш код для запуска интервала в функцию, если вы затем заставите его возвращать обещание, которое разрешается при вызове clear interval . вы можете использовать это для цепочки любого количества интервалов один за другим.

Ответ №1:

Определите setInterval for interval2 сразу после clearInterval для первой interval переменной, и это будет вызвано после очистки первого интервала.

 let interval2 = null;
const interval = setInterval(function () {
  prePost();
  array = images;
  main(current);
  if (current < array.length - 1) {
    current  
  } else {
    clearInterval(interval);

    interval2 = setInterval(function () {
      prePost();
      array = objects;
      main(current);
      if (current < array.length - 1) {
        current  
      } else {
        clearInterval(interval2)
      }
    }(), 6200);
  }
}(), 6200);  

Комментарии:

1. я попробовал ваш ответ, но, похоже, есть проблема. Массив изображений содержит 5 элементов, и я ожидаю, что код в main() будет выполнен 5 раз. Прямо сейчас он выполняется только один раз, а затем останавливается. Я не вижу никаких ошибок в консоли.

2. Я думаю, что есть проблема со array значением. Вы зарегистрировали array значение и current значение на консоли и дали мне знать? В коде нет проблем.

3. Это массив: ` var images = [ { id: 0, img: ‘resources/mentalImg/img/carretera.jpeg ‘, текст: ‘000’ }, {идентификатор: 1, img: ‘resources/mentalImg/img/ciudad.jpg ‘, текст: ‘000’ }, {идентификатор: 2, img: ‘resources/mentalImg/img/construccion.jpeg ‘, текст: ‘000’ }, { id: 3, img: ‘resources/mentalImg/img/fabrica.jpg ‘, текст: ‘000’ }, { идентификатор: 4, img: ‘resources/mentalImg/img/terreno.jpg ‘, текст: ‘000’ }, ];` и ток равен 0.