setTimeout выполняется сейчас и в данное время

1

Есть ли способ запустить setTimeout немедленно, а затем снова запустить в указанное время. например, я хочу, чтобы эта функция updateItemsCache запускалась при загрузке, а затем снова запускалась каждые 3 секунды.

сейчас он исполняется только каждые 3 секунды.

function updateItemsCache(){
  setTimeout(() => {
  //do stuff
  }, 30000);

}
Теги:
settimeout

3 ответа

1

https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/setTimeout

Нет, просто создайте функцию и вызывайте ее один раз до истечения времени ожидания и один раз за время ожидания

function updateItemsCache(){
  innerLogic()
  setTimeout(innerLogic, 30000);

}

function innerLogic(){

}
0

Следующий код объявит функцию, которая содержит setTimeout, который выполняет саму функцию. Не забудьте поставить вызов функции как последнюю вещь в вашем setTimeout.

Тогда все, что вам нужно сделать, это вызвать yout timeoutFunction().

Это гарантирует, что ваш код (который вы помещаете с помощью "//do stuff") выполняется при вызове функции. И, вызывая функцию timeout, снова запускается после желаемой задержки (мс).

const timeoutFunction = () => {
    setTimeout(() => {
        //do stuff
        timeoutFunction();
    }, ms);
}
timeoutFunction();
  • 1
    Спасибо за этот фрагмент кода, который может оказать некоторую ограниченную, немедленную помощь. Правильное объяснение значительно улучшило бы его долгосрочную ценность , показав, почему это хорошее решение проблемы, и сделало бы его более полезным для будущих читателей с другими, похожими вопросами. Пожалуйста, измените свой ответ, чтобы добавить некоторые объяснения, в том числе предположения, которые вы сделали.
  • 0
    Sry, добавил объяснение!
0

Если я правильно понимаю ваш вопрос, вы можете структурировать свой код, как показано ниже.

Таким образом, вы можете вызывать функцию (т.е. doStuff()) с регулярными 3-секундными интервалами через setTimeout(iteration, 3000); где iteration - это функция, которая:

  • вызывает вашу пользовательскую логику приложения, которую вы хотите выполнить с интервалом в 3 секунды, и,
  • планирует следующую итерацию (т.е. произойдет через 3 секунды в будущем)

Этот шаблон также гарантирует, что логика запускается как сразу, так и с интервалом в 3 секунды после первого выполнения:

const doStuff = () => {
  console.log('Do stuff at ${Date.now()}');
}


function updateItemsCache(){
  
  /*
  Define iteration function that invokes your
  "stuff" logic
  */
  const iteration = () => {
    
    doStuff();
    
    /*
    Use setTimeout() to schedule the next iteration
    at 3 seconds into the future (which will cause the
    iteration to repeat on 3 second intervals)
    */
    setTimeout(iteration, 3000);
  }
  
  /*
  Start iteration which calls you "stuff" logic
  immediately, and reschedules another iteration
  */
  iteration();
}

updateItemsCache();
  

Ещё вопросы

Сообщество Overcoder
Наверх
Меню